Normalmente, quando você recebe um >
na próxima linha depois de bater, significa que uma de suas cotações ainda não está fechada. Eu não consegui encontrar esse erro no seu regex. Mas você não precisa cercar o caminho /var/www_data/somepath/
com aspas simples. Eu suponho que não há caracteres incomuns em somepath
?
De qualquer forma, testei sua regex com sed. \d\w
parece com vim
sintaxe para mim, é por isso que eu traduzi para ascii (que sempre funciona). Além disso, dentro de []
você não precisa escapar .
:
sed -r "s/'([A-Za-z0-9_-.]+)(@domain.com)'/'adsf'/g" test.dat
De fato, você pode usar sed
ou perl
para sua tarefa. Você não precisa necessariamente de grep
para gerar uma lista de arquivos, a menos que tenha GB de dados. Então, pré-ordenar pode resultar em um benefício de velocidade.
Para testar seu regex , você pode fazer o seguinte:
cd /var/www_data/somepath/
sed -r 's|pattern|replace-pattern|g' a_single_file.php
Quando estiver satisfeito com o resultado, basta adicionar o argumento -ibak
( --in-place=bak
) e executá-lo em todos os arquivos
find . -type f -name '*.php' -o -name '*.ini' -o name '*.conf' -o -name '*.sh' \
-exec sed -r -ibak 's|pattern|replace-pattern|g' '{}' \;
Os arquivos originais estão sendo colocados em <orignalname.php>.bak
.
Para responder sua última pergunta. Para este trabalho, grep
é a ferramenta que você deseja, você pode executá-lo nos arquivos .bak
gerados por sed acima:
grep --recursive --include='*.bak' -E --files-with-matches 'pattern' . > files_fixed.txt
ou simplesmente:
find . -type f -name '*.bak'