web-dev-qa-db-ja.com

sedの `-n`オプションは何をしますか?

これは、-nのマニュアルページエントリです。

-n

パターンスペースの自動印刷を抑制

notを使用して特定の操作で-nを使用すると、各行がstdoutに出力されます(要求された行が2回出力されます)。

$ cat test.txt 
first
second
third
fourth
fifth

$ sed -n '2,3p' test.txt 
second
third

$ sed '2,3p' test.txt 
first
second
second
third
third
fourth
fifth

ただし、この法律は他のコマンドには適用されません。

$ sed -n 's/t/T/' test.txt 

$ sed 's/t/T/' test.txt 
firsT
second
Third
fourTh
fifTh

それで、-nは正確に何をしますか?

13
dotancohen

通常、sedは各行を処理し(置換などを行い)、結果を出力します。処理に印刷される行が含まれる場合(たとえば、sedのpコマンド)、2回印刷されます(処理中に1回、次に自動後処理印刷によって)。 -nオプションは自動印刷を無効にします。つまり、印刷するように特に指示していない行は印刷されず、明示的に印刷するように指示した行は(たとえばpを使用して)取得します。一度だけ印刷されます。

  • sed -n '2,3p' test.txt-要求に応じて、2〜3行目のみを出力します

  • sed '2,3p' test.txt-各行を(自動的に)印刷し、さらに2〜3行目をもう一度印刷します

  • sed -n 's/t/T/' test.txt-各行で "t"を "T"に置き換えますが、-nのために結果を出力しません

  • sed 's/t/T/' test.txt-各行で "t"を "T"に置き換え、結果を自動的に出力します

さらにいくつかの例を追加しましょう:

  • sed -n 's/t/T/p' test.txt-各行で "t"を "T"に置き換え、置換が行われた行のみを出力します(つまり "秒"ではありません)

  • sed 's/t/T/p' test.txt-各行で "t"を "T"に置き換え、置換が行われた行を印刷してから、各行を自動的に印刷します(結果: "second"が1回、その他すべてが2回)

  • sed '2,3p; 3p' test.txt-1、4、および5行目を1回印刷します(自動印刷)。 2行目を2回(最初のpコマンド、次に自動印刷)、3行目を3回(各pコマンドごとに1回、次に自動的に)。

17
Gordon Davisson