O que esta linha de script de shell do Linux faz?

1

Estou tentando determinar exatamente o que a seguinte linha de script de shell está fazendo.:

grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Tenho certeza que está tentando fazer uma pesquisa global em '9Kp' e substituir por '9K' no arquivo de dados especificado, no entanto não estou claro sobre o que o comando grep está fazendo antes disso.

    
por JJ01 29.07.2011 / 19:53

1 resposta

3
grep --files-with-matches '>' .

Pesquise > no diretório atual ( . ) e imprima apenas os nomes dos arquivos correspondentes ( --files-with-matches ).

Note que grep não retornará qualquer coisa se você der a ele um diretório ( . ) mas esquecer de habilitar o modo "recursivo". O comando correto seria

grep --files-with-matches --recursive '>' .

ou simplesmente

grep -Rl '>' .

| sort
| uniq

Classifique os resultados e remova as duplicatas.

| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT

Execute o comando fornecido ( perl ... ) com cada palavra 1 do stdin passado como argumentos adicionais.

Todos os arquivos dos resultados grep e também o arquivo /home/user/DATAFILE.DAT são atualizados substituindo o texto " 9Kp " por " 9K  ". Os arquivos antigos são copiados com um til à direita.

1 Nota: palavra , não linha . Isso significa que um nome de arquivo com espaços será tratado como vários nomes. xargs -d'\n' seria melhor, embora não seja perfeito.

    
por 29.07.2011 / 20:29