A ferramenta POSIX para edições com script de um arquivo (em vez de imprimir o conteúdo modificado para o padrão) é ex
.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Claro que você pode usarsed -i
se a sua versão do Sed suportar, apenas lembre-se de que não é portátil se você estiver escrevendo um script destinado a ser executado em diferentes tipos de sistemas.
David Foerster perguntou nos comentários:
Existe uma razão pela qual você está usando printf
e não echo
ou algo parecido ex -c COMMAND
?
Resposta: Sim.
Para printf
vs. echo
é uma questão de portabilidade; consulte Por que printf é melhor que eco? E também é mais fácil intercalar novas linhas entre comandos usando printf
.
Para printf ... | ex
vs. ex -c ...
, é uma questão de tratamento de erros. Para este comando específico, isso não importaria, mas em geral importa; por exemplo, tente colocar
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
em um script. Contraste com o seguinte:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
O primeiro travará e aguardará entrada; o segundo sairá quando o EOF for recebido pelo ex
comando, portanto, o script continuará. Existem soluções alternativas, como s///e
, mas elas não são especificadas pelo POSIX. Eu prefiro usar o formulário portátil, que é mostrado acima.
Para o g
comando, deve haver uma nova linha no final, e eu prefiro usar printf
para agrupar os comandos do que incorporar uma nova linha entre aspas simples.
awk
separador de campo!