私は本を読んでいて、次を実行するまでコマンドをsed & awk
理解したと思いました。n
sed
$ echo -ne "abc\ncde\nfg\n" | sed "/c/{
n
/f/d
}"
出力:
abc
cde
fg
しかし、私はその行がfg
削除されると予想しました。
プロセスの私の理解:
c
その行と一致すると、cde
次の行も一致するため、fg
コマンドで削除する必要があります。/f/d
f
私はコマンドを理解し、簡単だと確信しています。特に著者は大文字命令がN,D,P
より難しいと書いたので、それを理解すればとにかく小文字命令も理解できるはずです。しかし、N
コマンドには何の問題もありません。
ベストアンサー1
問題は、行がfg
パターンと一致しないことです/f/
。
最初の行がabc
一致すると、/c/
ブロック内のコマンドが実行されます。
この
n
コマンドは現在のパターンスペースを印刷し、abc
パターンスペースを次の入力行に置き換えますcde
。cde
一致するものがない場合は削除されず、/f/
標準d
出力として印刷されます。
入力の次の行を読み、fg
一致するものがない場合、/c/
コードブロックは実行されません。
l
ookコマンドを使用してこれを確認できます。
echo -ne "abc\ncde\nfg\n" | sed -n "l;/c/{
n
/f/d
}"
出力:
abc$
fg$
l
スクリプトの先頭に ook コマンドを追加すると、コードブロックの外側で処理される入力行がわかります。