Vamos simplificar. Os arquivos se encaixam confortavelmente na memória, então não se incomode em lê-los linha por linha ou qualquer coisa assim. O -p
do Perl (iterar sobre o conteúdo do arquivo) e -0777
“modo slurp” (leia um arquivo inteiro de uma vez, não linha por linha) são convenientes.
Para atuar em vários arquivos, é conveniente usar -i
(editar arquivos no lugar).
Para realizar a substituição, use o operador de substituição s
. Veja perlre # Modifiers para uma explicação dos modificadores msx
.
perl -0777 -i.orig -p -e '
s[
^(\s+) # indentation
\Q$(document).ready(function() {\E\n
\s*(\w+)Init # function name
(\(((?:(?>[^()]+)|(?3))*)\)) # balanced parentheses
;\n\s*\}\);
][
${1}initPage(\x27$2\x27, $3);
]msx;
' **/*.js
**/*.js
corresponde a todos os arquivos .js
no diretório atual e seus subdiretórios recursivamente. Isso funciona fora da caixa em zsh. Se você usar o bash, adicione shopt -s globstar
ao seu ~/.bashrc
.
(não testado, você provavelmente terá que ajustar um pouco o regexp).