根据行号替换字符串

kry*_*pto 68 sed awk

我有一种情况,我想替换许多文件中的特定字符串

将字符串AAA替换为另一个字符串BBB,但有很多字符串以 AAA 开头或以 AAA 结尾,我只想替换第 34 行中的一个并保持其他字符串完好无损。

是否可以按行号指定,在所有文件上,这个字符串正好在第 34 行。

小智 118

您可以在 sed 中指定行号或在 awk 中指定 NR(记录数)。

awk 'NR==34 { sub("AAA", "BBB") }'
Run Code Online (Sandbox Code Playgroud)

如果要在命令行中指定多个文件,请使用 FNR(文件编号记录)。

awk 'FNR==34 { sub("AAA", "BBB") }'
Run Code Online (Sandbox Code Playgroud)

或者

sed '34s/AAA/BBB/'
Run Code Online (Sandbox Code Playgroud)

用 sed 进行就地替换

sed -i '34s/AAA/BBB/' file_name
Run Code Online (Sandbox Code Playgroud)