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 -e
també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
.