web-dev-qa-db-ja.com

行番号に基づいて文字列を置き換える

多くのファイルで特定の文字列を置き換えたい状況があります

文字列[〜#〜] aaa [〜#〜]を別の文字列に置き換えます[〜#〜] bbb [〜#〜]で始まる文字列がたくさんありますAAAまたはAAAで終わる。行34の1つだけを置き換え、他はそのままにしたい。

行番号で指定することは可能ですか?すべてのファイルで、この文字列は34行目にあります。

52
krypto

行番号はsedで、NR(レコード数)はawkで指定できます。

awk 'NR==34 { sub("AAA", "BBB") }'

または、コマンドラインで複数のファイルを指定する場合は、FNR(ファイル番号レコード)を使用します。

awk 'FNR==34 { sub("AAA", "BBB") }'

または

sed '34s/AAA/BBB/'

sedでインプレース置換を行うには

sed -i '34s/AAA/BBB/' file_name
88
ramruma