sed 置換 - 複数ファイルのテキストを置き換える

sed 置換 - 複数ファイルのテキストを置き換える

複数のファイルを解析し、__esct関数のすべての項目をどのように置き換えることができますか?

__esct('Full name')   

に変換する:

$this->escape($this->translate('Full name'))  

代替テキストの後に2番目の中括弧を追加するにはどうすればよいですか?

答え1

これを試してください:

sed 's@__esct(\(.*)\)@$this->escape($this->translate(\1)@'  file.txt

答え2

sed -e 's/__esct(\(.*\))/$this->escape($this->translate(\1))/'

あなたをかなり遠くに連れて行きます。あなたが持っているなら、それは失敗するでしょうfoo(__esct('Some text'))

sed -e 's/__esct(\([^(]*\))/$this->escape($this->translate(\1))/'

これらの人には効果がありますが、その人には失敗します。__esct(foo('Some text'))

答え3

Perlには同様の作業を行うための優れた拡張機能があります。

perl -pi -e 's;__esct\(\'([a-zA-Z ]*)\'\);\$this->escape\(\$this->translate\(\'\1\'));g'  list of the files to mangle

元のファイルは<file>.bakのままです。これは、vi(1)で書かれているように、各行をグローバルに置き換えることです。 Perlでは()などがメタ文字であり、それを一致させるには\(\)が必要です。

[100% わかりません。」、この場合、特定のシェルが何をしているかを確認する必要があります。 ]

関連情報