sedのawkスーパーセットでありgrep、どちらかを使用すると簡単に実行できることがあります。
grep foosed '/foo/!d'またはと書くことができますawk /foo/が、考慮してください:
grep -i foosed '/[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実装がいくつかありますが、たとえばマルチバイト文字をサポートしていないため、マルチバイトロケールの米国英語のテキストでのみ正しく動作します。または、小さな固定長のバッファで動作し、したがって任意の入力では動作できないため、高速です...