私はファイルのn番目の一致行で一致する文字列を見つけるためにsedを使用しようとしています。num
その行の後にmachと「何でも」という表現を使用しますnum x
。
サンプルファイル:
START
num 1
num 1
num 1
num n
END
sed ':a;N;$!ba; s/num .*/num x/1' example
出力:
START
num x
sed ':a;N;$!ba; s/num 1/num x/1' example
出力:
START
num x
num 1
num 1
num n
END
.*
式を使用してそれに続くすべての項目を一致させてnum
置き換えようとnum x
しましたが、結果はファイルの終わりから外れます。式を行の実際の完全な文字列に置き換えると、目的の.*
結果が得られますが、行の文字の後には「何でも」が必要です。
答え1
あなたの正規表現は完全に正確ではありません。
$ sed ':a;N;$!ba; s/\nnum[^\n]*/\nnum x/4' file
答え2
sed は、1 行で s/old/new を実行するのに最適なツールです。他のタスクにはawkを使用してください。
$ awk -v n=4 '/num/ && ((++c) == n){$0="num x"} {print}' file
START
num 1
num 1
num 1
num x
END