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

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

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 de que ele está tentando fazer uma pesquisa global em '9Kp' e substituí-lo por '9K' no arquivo de dados especificado, mas não tenho certeza do que o comando grep está fazendo antes disso.

Responder1

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

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

Observe que grepnão retornaráqualquer coisase você fornecer um diretório ( .), mas esquecer de ativar o modo "recursivo". O comando correto seria

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

ou simplesmente

grep -Rl '>' .

| sort
| uniq

Classifique os resultados e remova duplicatas.

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

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

Cada arquivo dos grepresultados, e também o /home/user/DATAFILE.DATarquivo, são atualizados substituindo o texto " 9Kp" por " 9K ". O backup dos arquivos antigos é feito com um til final.

1 Nota:palavra, nãolinha. Isto 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.

informação relacionada