0

この質問では、これを行う方法を尋ねましたが、大文字化の特殊なケースにより、/u. そこで、ここでより一般的に質問します。大文字だけでなく、さまざまなケースでこれを使用する必要があることを発見しました。

を使用しsedて、文字 'a' を 'cool' に変更する方法 (ただし、2 つ以上の連続した文字として繰り返される場合のみ)。例:

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

(3 番目の単語に注意してください) ~

galaxy
ear
coolcoolrdvak
Hcoolcoolcoolcoolcoolcoolcoolcoolcool
于 2012-06-11T15:45:34.617 に答える
0

Levはその例を正しく理解しました。ジョン王子は一般的なケースを示しましたが、式が間違っていて、さらに1つのステップがありました。

いくつかのテストと考えの後、私たちが持っている2つをマージします:

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 に答える
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 に答える