あまり具体的な質問ではないかもしれませんが、Unix/Linuxシステム管理とテキスト処理における役割の点で、grep
、awk
、およびsed
の違いについて混乱しています。
短い定義:
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"
awk
とsed
は、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ユーザーになるのに役立ちます。
Grepは、ファイル内で一致する行をすばやく検索する場合に役立ちます。また、一致する行番号、一致カウント、ファイル名リストなど、他の簡単な情報を返すこともできます。
Awkは、CSVスタイルのファイルの読み取り、レコードの処理、およびオプションで結果データセットの出力を中心に構築されたプログラミング言語全体です。それは多くのことを行うことができますが、単純なタスクに使用する最も簡単なツールではありません。
Sedは、正規表現に基づいてファイルを変更する場合に便利です。行の一部を簡単に一致させ、変更を加え、結果を印刷することができます。これはawkよりも表現力が劣りますが、単純なタスクでは多少使いやすくなります。使用できるもっと複雑な演算子がたくさんあります(完全にチューリングしていると思います)が、一般にこれらの機能は使用しません。
ただ言及したいのですが、テキスト処理を実行できるツールはたくさんあります。並べ替え、切り取り、分割、結合、貼り付け、通信、uniq、列、rev、tac、tr、nl、pr、head、tail .....
それらは非常に便利ですが、オプションなどを学ぶ必要があります。
テキスト処理を学習するための怠zyな方法(最良の方法ではない)は、grep、sed、およびawkのみを学習することです。この3つのツールを使用すると、テキスト処理の問題のほぼ99%を解決でき、さまざまなコマンドやオプションを覚える必要がありません。 :)
そして、あなたが3つを学び、使用したなら、あなたは違いを知っていました。実際、ここでの違いは、どのツールがどのような問題を解決するのに優れているかを意味します。
より怠laな方法は、スクリプト言語(python、PerlまたはRuby)を学習し、それを使用してすべてのテキスト処理を実行することです。