grepが存在する世界で `sed -n "/regexp/p"`のユースケースはありますか?

grepが存在する世界で `sed -n "/regexp/p"`のユースケースはありますか?

sed -n "/regexp/p"一致する行だけが印刷され、regexp他の行は印刷されません。これは行われた操作と正確に一致しているようですgrep。この構成を使用して私が見た唯一のユースケースは、すでにgrepsed内で何かをしていて、他のプログラムにパイプするのが厄介な場合です。

誰もがこの構造を使用する他の理由を考えることができますかgrep

答え1

コマンドsed -n '/re/p'(または各ループの終わりでデフォルト出力を抑制sed '/re/!d'しない)は、同じで、両方ともこの基本的な方法でエディタのコマンド(「グローバルマッチングと印刷」)で追跡できます。存在するように。-ngrep -e 're'edg/re/presedgrepged

特定の正規表現に一致する行のみを印刷するには、grepを使用しますgrep。これが最も基本的な作業です。この操作にgrep代わって使用すると、sedシェルコードがよりきれいになり、理解と保守が容易になります。

長い編集スクリプトの一部である場合は、/re/pinを使用してください。非常に特別で気まぐれな要件がない限り、入力をパイプで接続したり、その逆にパイプしないでください。sedsedgrepsed

コマンド/re/は次のとおりです。sed住所。特定の正規表現に一致するすべての行を処理します。を使用すると、/re/p次の行が印刷されます。つまり、/re/コマンドのアドレスですp

アドレスは行番号であってもよいし、2行番号、2つの正規表現、またはそれらの組合せによって記述される範囲であってもよい。たとえば、を使用して、sed -n '5,/re/p'5行目から一致する行まですべての行を印刷できますre。ユーティリティgrepにはこの機能はなく、エディタsedからed継承されます。

簡単に言えば、grep特定の正規表現に一致する行を抽出するのに適したツールです。より複雑な基準(範囲内など)に一致する行を抽出するには、sedまたはを使用しますawk

答え2

サイズに注意してください:

$ ls -lh /bin/grep /bin/sed
-rwxr-xr-x 1 root root 207K Apr 29  2016 /bin/grep
-rwxr-xr-x 1 root root  72K Feb 11  2016 /bin/sed
$

grep以下より多くのメモリを使用しました。sed

実行時間(実際):

$ time date | grep Apr
Fri Apr 17 13:31:11 PDT 2020

real    0m0.035s
user    0m0.000s
sys     0m0.016s
$ time date | sed -n '/Apr/p'
Fri Apr 17 13:31:29 PDT 2020

real    0m0.028s
user    0m0.000s
sys     0m0.016s
$

sed少し速くなったのか見てみましょうか?

これは、リソースが制限されている組み込み環境では重要です。

関連情報