0

有谁知道任何可以替换特定事件的 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

4 回答 4

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
于 2013-10-09T06:16:58.107 回答
0

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

 $str =~ s/(number\s+555)/ ++$i==2 ? "number 666": $1/gse;
于 2013-10-09T05:28:02.077 回答
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
于 2013-10-09T05:29:16.840 回答
0

尝试使用sed

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

输出:

 number         555
 number         666
 number         555

参考SO问题

于 2013-10-09T05:30:25.680 回答