搜索并替换文件中的第n个匹配项

时间:2013-10-09 04:44:58

标签: regex linux perl

有没有人知道任何替换特定事件的unix命令/ perl脚本

我的文件是hello.txt

 number         555
 number         555
 number         555

现在我想用数字666替换第二次出现。

我一直在尝试这个命令

perl -n -i -e "s/number\\s+555/number 666/g" hello.txt

正在改变所有出现的情况。

一个衬里将非常有帮助。

4 个答案:

答案 0 :(得分:1)

$.保存当前文件句柄的行号,可用于给定的输入文件,如

perl -i -pe 's/number\s+555/number 666/ if $. == 2' hello.txt

或者如果number部分可以退出,

perl -i -pe 's/555/666/ if $. == 2' hello.txt

答案 1 :(得分:0)

我将文件hello.txt的内容读入数组,然后加入获取$ str。在这里它将替换第二次出现,我初始化为0.尝试此搜索并替换为一个衬垫。

 $str =~ s/(number\s+555)/ ++$i==2 ? "number 666": $1/gse;

答案 2 :(得分:0)

Does anyone know any unix commands:我相信awk适合此任务(http://www.grymoire.com/Unix/Awk.html)。

awk '{if (NR == 2) {gsub("555", "666", $0);} print $0; } ' hello.txt

答案 3 :(得分:0)

尝试使用sed

sed -r -i.bak ':a;N;$!ba;s/(number\s+)555/\1666/2' file

输出:

 number         555
 number         666
 number         555

Reference SO question