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


11

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

-n

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

特定の操作に使用しない場合-n、各行が標準出力に印刷されます(要求された行が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、正確に何をしますか?

回答:


14

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

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

  • sed '2,3p' test.txt -各行を(自動的に)印刷し、また2〜3行目を2回印刷します。

  • 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」に置き換え、置換が行われた行のみを出力します(つまり、「second」ではない)

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

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


ゴードンに感謝しますが、あなたの評価は私の観察を繰り返すだけです。最初の2つの例では、-n特に要求された行に加えて、すべての行を印刷せずにsed します。したがって、その場合-n 、解析されすべての行の印刷が抑制されます。ただし、3番目と4番目の例では、動作が異なります。これらの場合、sed without は行-nを2回出力し-nません。したがって、using は解析されすべての行の出力を抑制せず、変更されていない行の出力を抑制します。動作がどちらになるかを一般化するのが困難です。
dotancohen

いいえ、どちらの場合も-nまったく同じことを行います:すべての行が自動的に印刷される(およびpand p修飾子が代替コマンドに変わると、行がさらに印刷される)から、特に指定した場合にのみ行を印刷するモードに切り替えますto(pコマンドなどを使用)。
ゴードンデイヴィソン

さらに別の言い方をすると:-nオプションを追加; pして、sedコマンドに追加することもできます(例sed -n '2,3p; p'、どちらも使用しない場合と同じ結果が得られます。-nデフォルトの自動印刷を抑制し; p、明示的な(ほぼ同等の)印刷
ゴードンデイヴィソン

わかりました、ありがとう。この例を明確にするために時間を割いていただいたことに感謝します。素晴らしい一週間を!
dotancohen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.