Tente usar isso:
sed 's@__esct(\(.*)\)@$this->escape($this->translate()@' file.txt
Como analisar um monte de arquivos e substituir cada ocorrência da função __esct?
__esct('Full name')
converter para:
$this->escape($this->translate('Full name'))
Como adicionar essa segunda chave após o texto substituído?
sed -e 's/__esct(\(.*\))/$this->escape($this->translate())/'
Você deve percorrer um longo caminho. Ele falhará se você tiver foo(__esct('Some text'))
sed -e 's/__esct(\([^(]*\))/$this->escape($this->translate())/'
Este funcionará para aqueles, mas falhará em __esct(foo('Some text'))
Perl tem extensões legais para fazer algo assim:
perl -pi -e 's;__esct\(\'([a-zA-Z ]*)\'\);\$this->escape\(\$this->translate\(\'\'));g' list of the files to mangle
Ele deixará os originais como < file & bt; .bak. Esta é apenas uma substituição global em cada linha, assim como você a escreveria no vi (1). Em Perl, () e tal são metacaracteres, para combiná-los você precisa de \ (\).
[Não tenho 100% de certeza sobre o manuseio do ', preciso verificar o que o seu shell específico faz nesse caso.]
Tags sed