Neste comando, sort -u
removeu duplicatas.
curl https://en.wikipedia.org/wiki/Help:Special_page -s | grep -oP 'Special:\K[a-zA-Z0-9]*' | sort -u > special_page_names
Neste comando, não.
curl https://en.wikipedia.org/wiki/Help:Special_page -s | grep -oP 'Special:\K[a-zA-Z0-9]*' > special_page_names
sort -u special_page_names
Por que sort -u removeu duplicatas apenas no pipe?
ou seja, por que não removeu duplicatas quando executado em um arquivo regular?
sort
é um filtro. Ele lê a entrada, modifica os dados de alguma forma e imprime a saída.grep
também é um filtro.Normalmente, um filtro funciona lendo sua entrada padrão e gravando em sua saída padrão.
No caso da
… | grep … | sort -u > special_page_names
entrada padrão desort
vem degrep
e a saída padrão desort
vai paraspecial_page_names
. Você solicitou isso usando|
entregrep
esort
e usando> special_page_names
no final.A sintaxe
sort -u special_page_names
diz à ferramenta para ignorar sua entrada padrão (em seu shell interativo este é o terminal, entrada padrão herdada do shell) e lerspecial_page_names
em vez disso. A saída padrão não é redirecionada; é a saída padrão herdada do shell, geralmente o terminal, no seu caso o terminal . Os dados voaramspecial_page_names
para o seu terminal .Se você deseja salvar a saída de
sort -u special_page_names
em um arquivo normal, uma maneira é redirecionar a saída desort
, como no primeiro caso. Não redirecione de volta paraspecial_page_names
embora ; escolha outro arquivo.Existem ferramentas que podem modificar o arquivo que lêem (por exemplo, editores de texto). Existem filtros com a opção de sobrescrever o arquivo lido (por exemplo,
sed -i
). Você pode fazer a escrita de classificação no mesmo arquivo especificando o arquivo como um argumento de opção para-o
e um operando: