sed replace - substituindo texto em um monte de arquivos

1

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?

    
por Ryan Eckert 17.01.2013 / 21:50

3 respostas

3

Tente usar isso:

sed 's@__esct(\(.*)\)@$this->escape($this->translate()@'  file.txt
    
por 17.01.2013 / 21:52
2
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'))

    
por 17.01.2013 / 21:54
-1

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.]

    
por 18.01.2013 / 15:52

Tags