如何使用linux命令进行指定次数的字符串替换?

时间:2014-07-03 04:19:20

标签: awk sed

我使用以下sed命令替换字符串

sed -i "s|find string|replace string|g" inputfile

但它将取代所有的事件。 (我认为g适用于Global替代)

如何使用 sed grep awk 进行指定次数的字符串替换,即10次或15次。 ?

4 个答案:

答案 0 :(得分:2)

你可以这样做:

 perl -pe '$i++ while($i < 10 && s/pattern/replace/)' input

在awk中:

 awk '{ while( i< c && sub( "pattern", "replace" )) i+=1}1' c=10 input

答案 1 :(得分:1)

虽然最好不要使用sed来解决这个问题,但更喜欢使用awk(或perl)

sed -n -e '1h;1!H
$ {s/.*//;x
   t loop
:loop
   s|find string|replace string|
   t occur
   b print
:occur
   x
   s/$/o/
   t count
:count
   s/o\{10\}/&/
   x
   t print
   b loop
:print
   p
   }' YourFile
{p> 1 in s/o\{10\}/&/是想要出现的次数。使用s//;t label,如果/ goto。没有'其他',很多s//;t

首先,整个文件需要加载到工作缓冲区中(默认情况下每行sed工作)。此外,它使用辅助缓冲区作为计数器。

答案 2 :(得分:0)

这是另一个awk版本。

awk 'c && sub("pattern","replace") {c--}1' c=2 file

答案 3 :(得分:0)

这是一个更具可读性的awk版本:

awk '{for(i=0; i<15; i++) sub("pattern", "replacement"); print $0}' file