O que sed $ 's / [^ [: print:] \ t] // g' faz?

0

O comando sed $'s/[^[:print:]\t]//g' está imprimindo cada linha do meu .txt como está.

Para que é usado? Não consegui encontrar no google.

Por exemplo:

    sed $'s/[^[:print:]\t]//g' *.txt | wc -l
    15909

    cat *.txt | wc -l
    15909

Não há edições feitas nos arquivos. O que esse comando faz

    
por Viv 30.07.2018 / 09:41

1 resposta

5

O comando sed remove qualquer caractere que não seja imprimível, e não guias, do conteúdo de cada linha de entrada. O número de linhas não mudaria (os caracteres de nova linha não são removidos, pois não fazem parte do conteúdo da linha), mas o número de caracteres ou bytes. Teste novamente com wc -c para o número de bytes, wc -m para o número de caracteres.

A expressão regular [^...] corresponde a qualquer caractere único ( elemento de comparação real ) não dentro do [...] . Nesse caso, é a classe de caractere [:print:] e o caractere de tabulação. O $ no início da cadeia faz com que bash replace \t tenha um caractere de tabulação literal antes de chamar sed .

A classe de caractere [:print:] corresponde a caracteres imprimíveis na localidade atual, ou seja, caracteres alfanuméricos, caracteres de pontuação e espaço (mas não a guia que é um caractere de controle).

Em outras palavras, exclui tudo o que não é um caractere alfanumérico, caractere de pontuação, espaço ou tabulação.

Para gravar o resultado de volta no arquivo (uma "edição no local"), algumas implementações sed têm uma opção -i para isso; use sed -i ou sed -i '' dependendo da implementação. Certifique-se de que a saída correta seja produzida primeiro, ou você pode destruir seus dados.

    
por 30.07.2018 / 09:49