sed
のawk
スーパーセットでありgrep
、どちらかを使用すると簡単に実行できることがあります。
grep foo
sed '/foo/!d'
またはと書くことができますawk /foo/
が、考慮してください:
grep -i foo
sed '/[fF][oO][oO]/!d'
GNUのような非標準の拡張機能を検討したい場合を除き、そのようにする必要がありますsed '/foo/I!d'
。またはawk
:awk '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/
:sed
のs
コマンドには、次の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
実装がいくつかありますが、たとえばマルチバイト文字をサポートしていないため、マルチバイトロケールの米国英語のテキストでのみ正しく動作します。または、小さな固定長のバッファで動作し、したがって任意の入力では動作できないため、高速です...