sedの 'n'コマンドを理解していません

sedの 'n'コマンドを理解していません

私は本を​​読んでいて、次を実行するまでコマンドをsed & awk理解したと思いました。nsed

$ echo -ne "abc\ncde\nfg\n" | sed "/c/{
n
/f/d
}"

出力:

abc
cde
fg

しかし、私はその行がfg削除されると予想しました。

プロセスの私の理解:

  • cその行と一致すると、cde次の行も一致するため、fgコマンドで削除する必要があります。/f/df

私はコマンドを理解し、簡単だと確信しています。特に著者は大文字命令がN,D,Pより難しいと書いたので、それを理解すればとにかく小文字命令も理解できるはずです。しかし、Nコマンドには何の問題もありません。

ベストアンサー1

問題は、行がfgパターンと一致しないことです/f/

最初の行がabc一致すると、/c/ブロック内のコマンドが実行されます。

  • このnコマンドは現在のパターンスペースを印刷し、abcパターンスペースを次の入力行に置き換えますcde

  • cde一致するものがない場合は削除されず、/f/標準d出力として印刷されます。

入力の次の行を読み、fg一致するものがない場合、/c/コードブロックは実行されません。

lookコマンドを使用してこれを確認できます。

echo -ne "abc\ncde\nfg\n" | sed -n "l;/c/{
n
/f/d
}"

出力:

abc$
fg$

lスクリプトの先頭に ook コマンドを追加すると、コードブロックの外側で処理される入力行がわかります。

おすすめ記事