文書にはsed
次のように記載されていますd
。
パターンスペースを削除してすぐに次のサイクルを開始してください。
sed
なしで実行すると、コマンドの後にパターンスペースが自動的に印刷され-n
ますか?この場合、パターン空間が空であることがわかります。したがって、印刷するものと印刷しないものに違いはありません。しかし、ただ気になりました。sed
d
次の例があります。
root@u1804:~# seq 10 | sed -r '/5/d'
1
2
3
4
6
7
8
9
10
root@u1804:~#
ご覧のとおり、何もありません。実行が次のループに直接進むから5
ですか、それとも自動印刷パターンスペースが空の文字列を印刷するためですか?d
ベストアンサー1
はい、d
ループを再開すると自動的に印刷されません。d
viaなどのコマンドを実行した後、パターンスペースに追加しようとしたり、何も印刷されないことを簡単に知ることができます。G
試してみてください。保存してからviaに追加しようとすると、2回印刷されません。理由はとても簡単です。最後のコマンドは決して実行されません。それ以降のすべて(自動印刷を含む)は無視されます(つまり、現在のアドレスの場合)。s/^/STUFF/
seq 3 | sed '1h;2d;2G'
1
1h
2G
d
基準は非常に明確です。:
明示的に新しいループを開始するコマンドがない場合は、スクリプトの最後にパターンスペースを指定しない限り標準出力にコピーし、
-n
パターンスペースを削除する必要があります。
d
デフォルトでは、sedは処理されたすべての入力を印刷します(次のコマンドで修正/削除された入力を除く)。