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


50

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

文字列AAAを別の文字列BBBで置き換えますが、AAAで始まる文字列またはAAAで終わる文字列がたくさんあります。34行目の1つだけを置き換え、他の文字列はそのままにしておきます。

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

回答:


82

行番号は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

-3

file_recordの3行目を置き換えたいとします:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record

頭の前と後に-1 ...ここに戻って引用符を使用するには、それを取っていないこと
ラマン

1
これはうまくいきません。いくつかの強力なエスケープが必要です。そして、3行目が他の場所で複製された場合はどうなりますか?
Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.