在this question我问过如何做到这一点但是大写的特殊情况导致了一个特殊情况的解决方案,因为它允许使用/u
。所以我在这里问一般。我发现我必须在不同情况下使用它,而不仅仅是大写。
使用sed
,如何将字母'a'更改为'cool',但前提是它重复显示为两个或多个连续字母。例如,来自:
galaxy
ear
aardvak
Haaaaaaaaa
到
galaxy
ear
coolcoolrdvak
Hcoolcoolcoolcoolcoolcoolcoolcoolcool
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
列夫得到了正确的榜样。约翰王子给出了一般情况,但得到的公式错了,还有一步。
经过一些测试和思考,合并我们得到的两个:
l='a' #search string
r='cool' #replacement string
sed "s,$l$l,$r$r,g ; s,$r$l,$r$r,g," inputFile
测试并告诉我,它对我有用。