grep、less、awk、sedを使用する場合[終了]


17

私はLinuxの世界に入りつつあり、職場ではgrepますます使用しています。そうすることで、私が望むものに十分でない場合があることを理解しています。

私はgrep数日前に苦労していましたが、Linuxの上級管理者である私の同僚がを使用するように言われましたawk。どれだけ早く結果を得たかに驚いた。

だから私の質問は、いつあなたが一方を他方の上に使うことを選ぶのですか?一緒に仕事をしgrepたり時間awkを節約したり、時間を節約したりする前に、どんな質問を自問することができますか?


これは良い質問ですが、実際には非常に幅広く、主に意見に基づいています。質問に答えるには、awkではなくgrepを使用するかどうかは、awk / sedをどの程度快適に使用できるかにかかっています。grepが提供するものよりも具体的なものを探したり、特定の文字列でファイルを置換/編集しようとしている場合(sedを使用)など、後者よりもこれを使用する理由がいくつかあります。しかし、これもすべて、快適さのレベルとawk / sedの使用経験に依存しています。
リエカヨ

7
ファイルless表示するために使用します。ファイルgrep検索するために使用します。ファイルの編集に使用sedします。使用を超えると処理したいファイルは、いくつかの種類がある場合の構造(例えば列などを)。使用オーバーあなたは主にラインを扱う(DELETEなどやテキストの行を追加)したいとき。誰かが私のページよりも完全な20ページの回答を書くと思います。awkgrepsedsedawk
桂佐藤

こんにちは佐藤、それは長さについてではなく、言われています。そして、いくつかの行は非常に有益です。ありがとうございました。
フランクガスリー

回答:


25

sedawkスーパーセットでありgrep、どちらかを使用すると簡単に実行できることがあります。

grep foosed '/foo/!d'またはと書くことができますawk /foo/が、考慮してください:

grep -i foosed '/[fF][oO][oO]/!d'GNUのような非標準の拡張機能を検討したい場合を除き、そのようにする必要がありますsed '/foo/I!d'。またはawkawk 'tolower($0) ~ /foo/'または、GNU拡張を使用して:awk -v IGNORECASE=1 /foo/

さまざまなツールが得意で、他のツールでは扱いにくいもの:

grep

grepはシンプルなツールですが、awkまたはで再現するのが難しい非常に特殊な操作モードがありますsed

  • grep -i 大文字と小文字を区別しないマッチングの場合(上記を参照)
  • grep -Fe "$string"固定文字列検索の場合(export string; awk 'index($0, ENVIRON["string"])'awkに直接相当するものなしsed)。
  • (非標準)grep -r再帰的検索の場合
  • (非標準)grep -P/ perlに似た正規表現(最も主要なものではないが、perlに似た正規表現をサポートしてpcregrepいるsed実装もあります)
  • (非標準)grep -o一致した部分を返す(複数行awkまたはsed同じことをする)
  • (非標準)grep -A/B/C試合の前後のコンテキストを返す(sedまたはで同様の方法でやり直すのは苦痛ですawk

sed

  • s/foo/bar/sedsコマンドには、次のawkような実装が難しい機能があります。
  • s/foo\(.*\)bar/\1/g:キャプチャ(GNU awkにはそのgensub()拡張機能があります)
  • s/foo/bar/3:各行の3番目のオカレンスを置き換えます
  • (非標準):インプレースファイル編集(GNUでもサポートされるawkようになりました)。

awk

awk 3つの中で最も豊富な機能です。

  • 数字を扱うのに良い
  • 列でフォーマットされた入力を処理するのに適しています。
  • 連想配列を使用して、さまざまなソースからデータを抽出および結合するのに適しています。

perl

perl実用的な抽出およびレポートツールとして、これらすべてのベストがあります。それは、それが最初に(すべてのものを作るツールとなるようにするために設計されたものですsed/ awk時代遅れの)。

perlテキスト処理をマスターすることは、深刻な利点をもたらします。sedたとえば、あまり一般的でないコマンドを見る前であっても、少し時間をかけることをお勧めします。

性能

経験則として、ツールの専門性が高いほど、タスクで最も効率的です。しかし、それは実装、タスク、その他のいくつかの要因やパフォーマンスにも大きく依存しますが、それらを考慮する必要があるかもしれません。

たとえば、非常に高速な実装grepまたはsed実装がいくつかありますが、たとえばマルチバイト文字をサポートしていないため、マルチバイトロケールの米国英語のテキストでのみ正しく動作します。または、小さな固定長のバッファで動作し、したがって任意の入力では動作できないため、高速です...


素晴らしい答えです!ツールの効率について知っていますか?私はOPの発言、約混乱してるawkはるかに高速よりもありますgrep
-pfnuesel

@pfnuesel、それは実装と使用パターンに大きく依存します。例えば、mawk非常に効率的であることが知られている(しかし、それはいくつかの他のツールよりも効率的だ理由の一部であるマルチバイト文字をサポートしていません)
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.