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点について教えて下さい。
補足
たこさんサンキュー!!!!!!!!!!! 解決しました。