sedコマンド「n」と「b」の違いは何ですか?

sedコマンド「n」と「b」の違いは何ですか?

bラベルは許可しますが、nラベルは許可せず、ラベルなしで使用するには、...aなしで渡された引数bの最後に(少なくとも1行)ラベルを配置する必要があるという明白な構文点に加えて、ラベルとanは同じことをするようです。-ebn

これは本当ですか?それとも私が認識しなかった微妙な違いはありますか?どんな条件で彼らは同じことをし、どんな条件では同じことをしませんか。

ベストアンサー1

両方の例は同じで、nただb。出力が異なることがわかります。

$ echo $'1\n2\n3' | sed 's/./AA/; n; s/./BB/'
AA
BB
AA
$ echo $'1\n2\n3' | sed 's/./AA/; b; s/./BB/'
AA
AA
AA

bコマンドの最後に分岐します。 n残りのコマンドを実行し続けます。したがって、についてはb置き換えはs/./BB/行われません。使用する場合は、n1行ずつフィルタリングして実行します。

(上記のコマンドはGNU sedを使用して実行されました。BSD / OSX sedの場合は、OPで指摘されているように、コード形式に少しの変更が必要です。)

おすすめ記事