0

这个问题中,我询问了如何做到这一点,但大写的特殊情况导致了一个也是特殊情况的解决方案,因为它允许使用/u. 所以在这里我问得更笼统。我发现我必须在不同的情况下使用它,而不仅仅是大写。

使用sed,如何将字母“a”更改为“cool”,但前提是它以两个或多个连续字母重复出现。示例,来自:

galaxy
ear
aardvak
Haaaaaaaaa 

进入

galaxy
ear
coolcoolrdvak
Hcoolcoolcoolcoolcoolcoolcoolcoolcool 
4

4 回答 4

2

删除的答案几乎解决了它:

sed 's/aa/coolcool/g; s/coola/coolcool/'

如果一个人不知道要替换的字母,它就会变得更具挑战性。我只能想出相当可怕和自我重复的

sed '/\([[:alpha:]]\)\1/ {h; s/.*\([[:alpha:]]\)\1.*/\1/; x; s/\([[:alpha:]]\)\1/coolcool/g; G; s/cool\(.\)\(.*\)\n\1/coolcool\2/; s/\n.*//}'

这改变了

galaxy
ear
bbrdvak
Haaaaaaaaa

(注意第三个词)

galaxy
ear
coolcoolrdvak
Hcoolcoolcoolcoolcoolcoolcoolcoolcool
于 2012-06-11T15:45:34.617 回答
1
sed -r 's;aa;coola;g;s;aa;cool;g;s;coola;coolcool;g' inputFile

一般来说,

重击

l='a' #search string
r='cool' #replacement string
sed -r "s;$l$l;$r$l;g;s;$l$l;$r;g;s;$r$l;$r$r;g" inputFile
于 2012-06-11T15:23:34.930 回答
0

这可能对您有用:

sed ':a;s/\(a\|cool\)a/coolcool/g;ta' file

或更一般地说:

sed ':a;s/\(a\|\n\)a/\n\n/g;ta;s/\n/cool/g' file
于 2012-06-11T22:19:09.800 回答
0

列夫的例子是对的。约翰王子给出了一般情况,但把公式弄错了,而且还多了一步。

经过一些测试和思考,合并我们得到的两者:

l='a'    #search string
r='cool' #replacement string
sed "s,$l$l,$r$r,g ; s,$r$l,$r$r,g," inputFile

测试它并告诉我,它对我有用。

于 2012-06-11T23:12:48.067 回答