grep、less、awk、sedを使用する場合

grep、less、awk、sedを使用する場合

私はLinuxの世界に陥り、職場でLinuxをますます使用していますgrep。そうすることで、時にはそれが私の要件に十分ではないことがわかりました。

grep数日前に苦労していましたが、上級Linux管理者の一人が私にawk

だから私の質問は、いつ他のものよりも1つを使用することを選択しますか?仕事を始めてgrep、私ができることと時間を節約できた多くの時間を過ごす前に、自分にどんな質問をすることができますかawk

ベストアンサー1

sedそしてawk親セットなので、grepいくつかのタスクはどちらかを使用する方が簡単です。

grep foosed '/foo/!d'これはまたはで書くことができますが、awk /foo/次の点を考慮してください。

grep -i foosed '/[fF][oO][oO]/!d'GNUのようなものを考慮したくない場合は:sed '/foo/I!d'を使用するか、もう一度GNU拡張子を使用してください。awkawk 'tolower($0) ~ /foo/'awk -v IGNORECASE=1 /foo/

さまざまなツールがうまくいっているものと他のツールが困難になること:

grep

grepシンプルなツールですが、使用awkや再現が難しい非常に特殊な動作モードを持っていますsed

  • grep -i大文字と小文字を区別しない一致(上記参照)
  • grep -Fe "$string"固定文字列検索に使用されます(export string; awk 'index($0, ENVIRON["string"])'AND awk、ANDと直接同等のものはありませんsed)。
  • (非標準)grep -r再帰検索用
  • (非標準)grep -P/ pcregrepPerlに似た正規表現の場合(一部のsed実装ではPerlに似た正規表現をサポートしていますが、デフォルトではサポートしていません)
  • (非標準)grep -o一致する部分を返します(複数行awkまたはsed同じ操作を実行します)。
  • (非標準) 一致のコンテキストを返します。 (やはり使いにくいgrep -A/B/Cか似たような方法です)sedawk

sed

  • s/foo/bar/sedさんのコマンドには、次のようにs実装するのが難しい機能があります。awk
  • s/foo\(.*\)bar/\1/g:capture(GNU awkには拡張機能がありますがgensub()
  • s/foo/bar/3:各行の3番目の項目を置き換えます。
  • (非標準):内部ファイルの編集(GNUはawkこれをサポートしていますが)。

アッ

awk3つの中で最も機能が豊富なものです。

  • 数値処理に適しています
  • 列形式の入力を処理するのに適しています。
  • 連想配列は、さまざまなソースからデータを抽出して結合するのに適しています。

真珠

perl実用的な抽出および報告ツールとして、これらすべてのツールの中で最高の機能を備えています。これはもともと意図されています(sedこれはすべてを役に立たないようにするツールですawk)。

テキスト処理をマスターするにはperl大きな利点があります。あまり一般的でないコマンドを調べる前に、時間をかけて調べることをお勧めしますsed

パフォーマンス

経験上、ツールがより専門的になるほど、作業を効率的に完了できます。ただし、これは実装、タスク、およびその他の要因によって大きく異なり、パフォーマンスの矛盾がある可能性があります。

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

おすすめ記事