- 締切済み
sedで特定文字が出たら次の行は読み飛ばす
Linuxのsedコマンドなのですが、特定文字列が出たら読み飛ばすという事をやっています。 例えば、'#SKIP'が出たら次の行(複数行)は読み飛ばすみたいな事をです。 行飛ばしで2点質問がありますのでお願いします。 以下の様なファイルがあります。 /---------- $ cat input.txt YYYY YYYY YYYY YYYY YYYY #SKIP YYYY YYYY YYYY YYYY YYYY -----------/ '#SKIP'が出たら次の行を読み飛ばすは、 $ sed '/#SKIP/{N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 YYYY YYYY YYYY YYYY と、'#SKIP'の下の行が置換されます。 数行読み飛ばす場合は $ sed '/#SKIP/{N;N;N; s/YYYY/2016/g}' input.txt YYYY YYYY YYYY YYYY YYYY #SKIP 2016 2016 2016 YYYY YYYY と、'#SKIP'から下の3行が置換されます。 てっきり、'#SKIP'から指定した(N;)行分読み飛ばし、それ以降を置換すると 思っていたのですが違うのでしょうか。 使い方が間違っているのでしょうか。 また、同じ様な行飛ばしで、範囲指定した場合ですが、 $ sed -e '3,20n;n;n; s/YYYY/2016/g' input.txt や $ sed -e '3,20{n;n;n; s/YYYY/2016/g}' input.txt とした場合、範囲指定外の3~20以外でも置換されます。 3行目から置換されたり、20行目を越えても置換されます。 OS、バージョンによるものでしょか。 本記載の2点について教えて下さい。
- みんなの回答 (4)
- 専門家の回答
お礼
ありがとうございます。