o que o comando sed -e 's/\(~\).*\(~\)// faz em um arquivo de texto?

o que o comando sed -e 's/\(~\).*\(~\)// faz em um arquivo de texto?

o que o comando sed -e 's/\(~\).*\(~\)// faz com um arquivo de texto? Eu não entendo isso. Eu descobri isso no meu trabalho.

Responder1

O comando (se você adicionar aspas simples faltantes no final) imprimirá todas as linhas do arquivo no terminal, mas se houver pelo menos dois ~caracteres (til) em qualquer linha, então o bit entre o primeiro e o último ~será ser removido por meio de um comando de substituição ( s) em sed.

Exemplo:

$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is  THE END

Os \(e \)não são necessários (já que não há referências anteriores usadas na expressão), e os -etambém podem ser omitidos (já que há apenas uma expressão), portanto o comando é equivalente a

sed 's/~.*~//' file

Então, nãofazerqualquer coisa no arquivo em si, mas ele lerá e modificará o conteúdo do arquivo, produzindo um texto processado que você poderá salvar em um novo arquivo com um redirecionamento ( sed ... >newfile).


Uma referência retroativapoderiaser usado neste comando, assim:

sed 's/\(~\).*\1//' file

Ou seja, combine a ~, depois algum outro texto e depois a mesma coisa que combinamos no primeiro \(...\)grupo (um til). Mas isso não economiza na digitação nem torna o comando mais fácil de manter ou entender, portanto não haveria nenhuma melhoria em relação ao sed 's/~.*~//' file.

informação relacionada