2013-10-09 68 views
0

有誰知道任何UNIX命令/ perl腳本將取代特定occurence搜索並在文件中更換第n個occurence

我的文件hello.txt的

number   555 
number   555 
number   555 

現在我想更換第二與數occurence 666

我一直在嘗試此命令

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

這是改變所有的事件。

一個內襯將是非常有幫助的。

+0

可能重複http://stackoverflow.com/問題/ 2555662 /如何-可以-I-替代最第n-發生對的一匹配-IN-A-perl的正則表達式) – Zaid

回答

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 
的[我怎麼能代替在一個Perl的正則表達式匹配的第n次出現?](
0

我讀取文件hello.txt的內容到數組,然後加入獲得$ str。在這裏,它將替換第二次出現與我初始化爲0.嘗試此搜索並替換在一個班輪中。

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

使用try sed

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

輸出:

number   555 
number   666 
number   555 

Reference SO question

相關問題