我使用以下sed命令替换字符串
sed -i "s|find string|replace string|g" inputfile
但它将取代所有的事件。 (我认为g
适用于Global
替代)
如何使用 sed 或 grep 或 awk 进行指定次数的字符串替换,即10次或15次。 ?
答案 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