O sistema operacional Linux oferece várias ferramentas para gerenciamento e edição de arquivos, neste artigo mostram como usar alguns comandos para substituir uma ou mais palavras em um arquivo de texto. Um comando bastante útil quando você precisa substituir uma ou mais palavras em alguns arquivos é este:
sed -i 's/parola1/parola2/g' *.txt
Desta forma será substituído parola1 por parola2 em todos os arquivos de texto no diretório atual.
Mas se tivéssemos que fazer isso também substituir os arquivos em algumas pastas, então o comando acima se torna-se:
find ./ -type f -exec sed -i 's/parola1/parola2/g' '{}' \;
Neste caso, eu fiz sem o filtro do tipo de arquivo, ou seja sem a extensão .txt. Por isso todos os arquivos serão levados em conta no diretório atual e em seus subdiretórios.
No comando find que foi utilizado, o “-exec” que permite executar um comando, a cada vez que um arquivo é encontrado, que respeite as regras estabelecidas para a pesquisa. No caso anterior, a pesquisa inclui todos os elementos do tipo “file” e excluir os diretórios.
Tudo está coberto por “-exec” é o comando a ser executado e seus parâmetros, para o caractere “;” indicando o final da cadeia de comando.
Outro elemento-chave é o símbolo “{}“Indica que o nome real do arquivo e descobriu que, desta forma ser usado como um parâmetro do comando que deseja executar. No comando anterior chaves” {} “foram listadas e no final de comando é precedido de uma barra “\” para proteger esses símbolos de ‘expansão shell.
O comando é executado no diretório de partida, então se o comando digitado necessita de uma saída deve ser levado em conta.
Aconselho a buscar em primeiro lugar a palavra, só para ver o que será encontrado e substituído:
find ./ -type f -exec grep -r "parola1" '{}' \;
Ou você pode usar o comando:
find ./ -type f -print0 | xargs -0 grep "parola1"
Desta forma irá exibir todas as linhas que contêm a string.
Em particular, a diretiva tem sido usado “-print0″ que permite a saída do nome completo terminada por um caractere nulo. Desta forma, o string produzida pode ser interpretado corretamente pelo programa a seguir.
Na verdade, a saída do find está conectada com um tubo para xargs comando cujo parâmetro “-0″ indica que os nomes dos arquivos recebidos como um fim de entrada com um caractere nulo.
O comando “xargs” é responsável por receber os nomes dos arquivos e executar o comando ” grep “, que por sua vez usa os parâmetros passados para xargs.
Se você só quer ver exibido o nome do arquivo que a contém, o comando é:
find ./ -type f -print0 | xargs -0 grep -l "parola1"
O parâmetro “-l” indica que temos como saída uma lista de nomes de arquivos, mas não as linhas, foram encontrados nos jogos.
Faço notar que em todos os comandos listados tem sido sugerido que a pesquisa para acontecer no diretório atual e todos os seus sub-diretórios, mas se quisermos olhar para qualquer diretório que você deve inserir o caminho (relativo ou absoluto):
find /home/user/ -type f | xargs grep -l "parola1"
Finalmente, se não fosse necessário o uso de parâmetros complexos para a busca de arquivos e deseja apenas pesquisa recursivamente uma palavra ou frase dentro dos arquivos em subdiretórios múltiplas, muito mais simples basta usar o comando grep com o “-r ”
grep “this text” *.php -r
Desta forma ele vai olhar para a string “este texto” em todos os arquivos. “php” no diretório atual e todos os seus subdiretórios.
sed -i 's/parola1/parola2/g' *.txt
Desta forma será substituído parola1 por parola2 em todos os arquivos de texto no diretório atual.
Mas se tivéssemos que fazer isso também substituir os arquivos em algumas pastas, então o comando acima se torna-se:
find ./ -type f -exec sed -i 's/parola1/parola2/g' '{}' \;
Neste caso, eu fiz sem o filtro do tipo de arquivo, ou seja sem a extensão .txt. Por isso todos os arquivos serão levados em conta no diretório atual e em seus subdiretórios.
No comando find que foi utilizado, o “-exec” que permite executar um comando, a cada vez que um arquivo é encontrado, que respeite as regras estabelecidas para a pesquisa. No caso anterior, a pesquisa inclui todos os elementos do tipo “file” e excluir os diretórios.
Tudo está coberto por “-exec” é o comando a ser executado e seus parâmetros, para o caractere “;” indicando o final da cadeia de comando.
Outro elemento-chave é o símbolo “{}“Indica que o nome real do arquivo e descobriu que, desta forma ser usado como um parâmetro do comando que deseja executar. No comando anterior chaves” {} “foram listadas e no final de comando é precedido de uma barra “\” para proteger esses símbolos de ‘expansão shell.
O comando é executado no diretório de partida, então se o comando digitado necessita de uma saída deve ser levado em conta.
Aconselho a buscar em primeiro lugar a palavra, só para ver o que será encontrado e substituído:
find ./ -type f -exec grep -r "parola1" '{}' \;
Ou você pode usar o comando:
find ./ -type f -print0 | xargs -0 grep "parola1"
Desta forma irá exibir todas as linhas que contêm a string.
Em particular, a diretiva tem sido usado “-print0″ que permite a saída do nome completo terminada por um caractere nulo. Desta forma, o string produzida pode ser interpretado corretamente pelo programa a seguir.
Na verdade, a saída do find está conectada com um tubo para xargs comando cujo parâmetro “-0″ indica que os nomes dos arquivos recebidos como um fim de entrada com um caractere nulo.
O comando “xargs” é responsável por receber os nomes dos arquivos e executar o comando ” grep “, que por sua vez usa os parâmetros passados para xargs.
Se você só quer ver exibido o nome do arquivo que a contém, o comando é:
find ./ -type f -print0 | xargs -0 grep -l "parola1"
O parâmetro “-l” indica que temos como saída uma lista de nomes de arquivos, mas não as linhas, foram encontrados nos jogos.
Faço notar que em todos os comandos listados tem sido sugerido que a pesquisa para acontecer no diretório atual e todos os seus sub-diretórios, mas se quisermos olhar para qualquer diretório que você deve inserir o caminho (relativo ou absoluto):
find /home/user/ -type f | xargs grep -l "parola1"
Finalmente, se não fosse necessário o uso de parâmetros complexos para a busca de arquivos e deseja apenas pesquisa recursivamente uma palavra ou frase dentro dos arquivos em subdiretórios múltiplas, muito mais simples basta usar o comando grep com o “-r ”
grep “this text” *.php -r
Desta forma ele vai olhar para a string “este texto” em todos os arquivos. “php” no diretório atual e todos os seus subdiretórios.
Comments
Post a Comment