La herramienta POSIX para ediciones guionadas de un archivo (en lugar de imprimir los contenidos modificados a la salida estándar) es ex
.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Por supuesto, puede usarlosed -i
si su versión de Sed lo admite, solo tenga en cuenta que no es portátil si está escribiendo un script destinado a ejecutarse en diferentes tipos de sistemas.
David Foerster preguntó en los comentarios:
¿Hay alguna razón por la que estás usando printf
y no echo
o algo así ex -c COMMAND
?
Respuesta: sí.
Para printf
vs. echo
es una cuestión de portabilidad; ver ¿Por qué es printf mejor que echo? Y también es más fácil intercalar líneas nuevas entre comandos usando printf
.
Para printf ... | ex
vs. ex -c ...
, es una cuestión de manejo de errores. Para este comando específico no importaría, pero en general sí; por ejemplo, intenta poner
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
en un guion Contraste con lo siguiente:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
El primero colgará y esperará entrada; el segundo saldrá cuando el ex
comando reciba EOF , por lo que el script continuará. Existen soluciones alternativas, como s///e
POSIX, pero no están especificadas. Prefiero usar el formulario portátil, que se muestra arriba.
Para el g
comando, debe haber una nueva línea al final, y prefiero usar printf
para ajustar los comandos en lugar de incrustar una nueva línea entre comillas simples.
awk
separador de campo!