Alguma mágica do Unix Copiar / Encontrar / Substituir

Tenho trabalhado com muitos arquivos simples ultimamente e achei esses comandos bastante úteis quando se trata de pesquisar padrões de texto específicos, substituindo essas correspondências por alternativas e copiando / excluindo ou executando qualquer outra ação na saída.

Testado no OS X e openSuSE, mudanças podem ser necessárias para diferentes sabores de Linux

_ Nota : Alguns dos comandos abaixo (conforme sinalizado por @serverhorror ) podem exceder o número máximo permitido de argumentos para uma determinada máquina: getconf ARG_MAXresultando em falha de execução. Use o abaixo com cuidado. _

Obtenha a lista de arquivos com um padrão correspondente em um determinado diretório

egrep [options] PATTERN [FILE...]

Exemplo

egrep -Rl 'IP445A' ./*

-l, --files-with-matches

Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning will stop on the first match.


-R, -r, --recursive

Read all files under each directory, recursively; this is equiv-alent to the -d recurse option.

Obtenha o número de arquivos correspondentes

Retorna o número de arquivos contendo texto que corresponde ao padrão.

egrep [options] PATTERN [FILE...] | wc -l

-l
The number of lines in each input file is written to the standard output.

Exemplo

egrep -Rl 'IP445A' ./* | wc -l

Armazene os nomes de cada arquivo correspondente em outro arquivo de texto

egrep [options] PATTERN [FILE...] > container.txt

Exemplo

egrep -Rl 'IP445A' ./* > list.txt

Copie os arquivos com um padrão correspondente para um novo diretório

cp `egrep [options] PATTERN [FILE...]` <New Directory>

Exemplo

cp `egrep -Rl "IP445A" ./*` ../matching/

O comando cp executará egrep primeiro e copiará todos os resultados para um novo diretório.

Observe que egrep é delimitado por crases e não aspas simples.

Substitua o padrão correspondente por outra string

grep -l '' <directory> | xargs sed -i "" 's/<regex>/<replacement>'

-i extension
Edit files in-place, saving backups with the specified extension. If a zero-length extension is given, no backup will be saved. It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or par-tial content in situations where disk space is exhausted, etc.

Exemplo

grep -l '' ./* | xargs sed -i "" 's/IP4445A/IP445A/'

Consulte as páginas do manual (na seção de fontes abaixo) para obter uma explicação detalhada dos parâmetros.

Leia uma lista de arquivos de um arquivo de texto e copie cada um para um novo diretório

#OSX use -I / for other Linux distros use -J
cat list
.txt | xargs -I % cp % <absolute path>

Exemplo

cat list.txt | xargs -I % cp % /Users/bassemd/newFolder

Fontes

Eu recomendo que você leia as páginas de manual de cada comando para ter uma compreensão mais profunda dele e de suas diversas opções