A ferramenta POSIX para edições com script de um arquivo (em vez de imprimir o conteúdo modificado para saída padrão) é ex
.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Claro que você pode usar sed -i
se a sua versão do Sed for compatível, saiba que não é portátil se você estiver escrevendo um script que deve ser executado em diferentes tipos de sistemas.
David Foerster perguntou nos comentários:
Is there a reason why you're using printf
and not echo
or something like ex -c COMMAND
?
Resposta: Sim.
Para printf
vs. echo
, é uma questão de portabilidade; veja Por que o printf é melhor que o 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 acontece; por exemplo, tente colocar
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
em um script. Compare com o seguinte:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
O primeiro irá travar e aguardar entrada; o segundo sairá quando o EOF for recebido pelo comando ex
, portanto, o script continuará. Existem alternativas alternativas, como s///e
, mas elas não são especificadas pelo POSIX. Eu prefiro usar a forma portátil, mostrada acima.
Para o comando g
, deve ser uma nova linha no final, e eu prefiro usar printf
para agrupar os comandos em vez de incorporar uma nova linha entre aspas simples.