GNU/Linux >> Linux の 問題 >  >> Linux

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

テキスト処理を実行できるツールはたくさんあります。たとえば、sort、cut、split、join、paste、comm、uniq、column、rev、tac、tr、nl、pr、head、tail などです。 ..

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

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

そして、この 3 つを学んで使用したことがあれば、その違いを理解することができます。実際、ここでの違いは、どのツールがどのような問題を解決するのに適しているかということです。

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


簡単な定義:

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 -i 's/cat/dog/' file.txt
# this will replace any occurrence of the characters 'cat' by 'dog'

ぎこちない

$ 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 よりも表現力は劣りますが、単純なタスクではいくらか使いやすくなっています。使用できるより複雑な演算子が多数あります (完全にチューリングされていると思います) が、通常はこれらの機能を使用しません。


Linux
  1. DebianとUbuntu:違いは何ですか?

  2. Grepがファイルをバイナリと見なす理由は何ですか?

  3. 7zip、Xz、Gzip、Tarなど—違いは何ですか?

  1. 「chattr +i FILE」と「chmod -w FILE」の違いは何ですか?

  2. rdesktop と xfreerdp の違いは何ですか?

  3. .profile .bash_profile と .bashrc の機能上の違いは何ですか?

  1. MySQLとMariaDB:それらの主な違いは何ですか

  2. 主流の*nixシェル間の基本的な違いは何ですか?

  3. `touch`コマンドの正当な使用法は何ですか?