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

Configure BASH, KSH, TCSH, ZSH Shell To Logout User Automatically After Idle Time

You can configure any Linux system to automatically log users out after a period of inactivity. Simply login as the root user and create a file called /etc/profile.d/autologout.sh , enter: # vi /etc/profile.d/autologout.sh Append the following code: TMOUT=300 readonly TMOUT export TMOUT Save and close the file. Set permissions: # chmod +x /etc/profile.d/autologout.sh Above script will implement a 5 minute idle time-out for the default /bin/bash shell. You can also create tcsh version as follows: # vi /etc/profile.d/autologout.csh Append the following code: set -r autologout 5 Save and close the file. Set permissions, enter: # chmod +x /etc/profile.d/autologout.csh Dealing with ssh clients SSH allows administrators to set an idle timeout interval. After this interval has passed, the idle user will be automatically logged out. Open /etc/ssh/sshd config file, enter: # vi /etc/ssh/sshd config Find ClientAliveInterval and set to 300 (5 minutes) as follows: ...