複数のファイルを解析し、__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% わかりません。」、この場合、特定のシェルが何をしているかを確認する必要があります。 ]