Skip to main content

Recursivamente procurar e substituir uma palavra em vários arquivos

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.

Comments

Popular posts from this blog

Installing PIP in OpenBSD 5.6

pip included with Python Python 2.7.9 and later (on the python2 series), and Python 3.4 and later include pip by default [1], so you may have pip already. Install pip To install pip, securely download get-pip.py: #curl --remote-name https://bootstrap.pypa.io/get-pip.py Then run the following (which may require administrator access): #python get-pip.py If setuptools (or distribute) is not already installed, get-pip.py will install setuptools for you. To upgrade an existing setuptools (or distribute), run pip install -U setuptools.

Instalando Packet Tracer 6.3 no Fedora 23

Vamos começar... 1. Baixe o arquivo desse link:     http://www.deltaeridani.com/openssl-lib-compat-1.0.0i-1.fc20.i686.rpm 2. Baixe o Packet Tracer 6.3 do site netacad.com 3. Instale as seguintes dependencies:     dnf install libICE.i686 libpng libSM.i686 libX11.i686 libXext.i686 libXi.i686 libXrandr.i686 fontconfig.i686 libgcc.i686 glib.i686 compat-libstdc++-33.i686 libstdc++.i686 glib2.i686 libgthread-2.0.so.0 libglib-2.0.so.0 4. Instale usando o dnf o pacote que voce baixou no item 1:     dnf install openssl-lib-compat-1.0.0i-1.fc20.i686.rpm 5. Instalando o Packet Tracer 6.3:     tar xfvz PacketTracer63_linux.tar.gz     cd PacketTracer63/     sudo su     ./install     exit 6. Criando o atalho na área de trabalho ( Usando seu usuário padrão )     cp /opt/pt/art/app_student.png /usr/share/icons/     emacs /home/usua...

Using GnuPG for SSH authentication

“Using GnuPG for SSH authentication” may refer to two distinct things: making the GnuPG agent (which is normally used to cache the passphrase of your OpenPGP key) to also act as a SSH agent, to cache the passphrase of your SSH key; using a key pair of your OpenPGP keyring as a SSH key pair. In this note, I will explain how to do this in GnuPG 2.1 (“modern”).