-nなしでsedを実行すると、dコマンドはパターンスペースの内容のデフォルトの自動印刷をスキップしますか?

-nなしでsedを実行すると、dコマンドはパターンスペースの内容のデフォルトの自動印刷をスキップしますか?

文書にはsed次のように記載されていますd

パターンスペースを削除してすぐに次のサイクルを開始してください。

sedなしで実行すると、コマンドの後にパターンスペースが自動的に印刷され-nますか?この場合、パターン空間が空であることがわかります。したがって、印刷するものと印刷しないものに違いはありません。しかし、ただ気になりました。sedd

次の例があります。

root@u1804:~# seq 10 | sed -r '/5/d'
1
2
3
4
6
7
8
9
10
root@u1804:~#

ご覧のとおり、何もありません。実行が次のループに直接進むから5ですか、それとも自動印刷パターンスペースが空の文字列を印刷するためですか?d

ベストアンサー1

はい、dループを再開すると自動的に印刷されません。dviaなどのコマンドを実行した後、パターンスペースに追加しようとしたり、何も印刷されないことを簡単に知ることができます。G試してみてください。保存してからviaに追加しようとすると、2回印刷されません。理由はとても簡単です。最後のコマンドは決して実行されません。それ以降のすべて(自動印刷を含む)は無視されます(つまり、現在のアドレスの場合)。s/^/STUFF/
seq 3 | sed '1h;2d;2G'11h2Gd
基準は非常に明確です。:

明示的に新しいループを開始するコマンドがない場合は、スクリプトの最後にパターンスペースを指定しない限り標準出力にコピーし、-nパターンスペースを削除する必要があります。

それもあなたが引用したマニュアル:

dデフォルトでは、sedは処理されたすべての入力を印刷します(次のコマンドで修正/削除された入力を除く)。

おすすめ記事