web-dev-qa-db-ja.com

grep、awk、sedの違いは何ですか?

可能性のある複製:
Perl、Python、AWK、sedの違いは何ですか?
sedとawkの違いは何ですか?

あまり具体的な質問ではないかもしれませんが、Unix/Linuxシステム管理とテキスト処理における役割の点で、grepawk、およびsedの違いについて混乱しています。

117
user288609

短い定義:

grep:ファイル内の特定の用語を検索します

#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"

$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"

awksedは、grepと完全に異なります。 awkおよびsedはテキストプロセッサです。テキストで探しているものを見つけることができるだけでなく、テキストを削除、追加、変更することもできます(その他にも)。

awkは、主にデータの抽出とレポートに使用されます。 sedはストリームエディターです
それぞれに独自の機能と専門性があります。


Sed

$ sed -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

Awk

$ awk '{print $2}' file.txt
# this will print the second column of file.txt

基本的なawkの使用法:
計算合計/平均/最大/最小/など。必要なものは何でも。

$ cat file.txt
A 10
B 20
C 60
$ awk 'BEGIN {sum=0; count=0; OFS="\t"} {sum+=$2; count++} END {print "Average:", sum/count}' file.txt
Average:    30

この本を読むことをお勧めします: Sed&Awk:2nd Ed。

Unixのような環境で熟練したsed/awkユーザーになるのに役立ちます。

173
aayoubi

Grepは、ファイル内で一致する行をすばやく検索する場合に役立ちます。また、一致する行番号、一致カウント、ファイル名リストなど、他の簡単な情報を返すこともできます。

Awkは、CSVスタイルのファイルの読み取り、レコードの処理、およびオプションで結果データセットの出力を中心に構築されたプログラミング言語全体です。それは多くのことを行うことができますが、単純なタスクに使用する最も簡単なツールではありません。

Sedは、正規表現に基づいてファイルを変更する場合に便利です。行の一部を簡単に一致させ、変更を加え、結果を印刷することができます。これはawkよりも表現力が劣りますが、単純なタスクでは多少使いやすくなります。使用できるもっと複雑な演算子がたくさんあります(完全にチューリングしていると思います)が、一般にこれらの機能は使用しません。

51
Kurt Stutsman

ただ言及したいのですが、テキスト処理を実行できるツールはたくさんあります。並べ替え、切り取り、分割、結合、貼り付け、通信、uniq、列、rev、tac、tr、nl、pr、head、tail .....

それらは非常に便利ですが、オプションなどを学ぶ必要があります。

テキスト処理を学習するための怠zyな方法(最良の方法ではない)は、grep、sed、およびawkのみを学習することです。この3つのツールを使用すると、テキスト処理の問題のほぼ99%を解決でき、さまざまなコマンドやオプションを覚える必要がありません。 :)

そして、あなたが3つを学び、使用したなら、あなたは違いを知っていました。実際、ここでの違いは、どのツールがどのような問題を解決するのに優れているかを意味します。

より怠laな方法は、スクリプト言語(python、PerlまたはRuby)を学習し、それを使用してすべてのテキスト処理を実行することです。

32
Kent