Acabo de correr
cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
y obtuve el resultado en el cli que esperaba, que era todas las líneas readme.logque no contenían ' Apple' ...
Luego corrí ...
cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
Sin embargo, /opt/webapplications/Word/readme.logestá en blanco.
¿Alguien puede explicarme por qué sucedió esto, o la forma correcta en que debería haberlo hecho?

Respuestas:
Esto sucedió porque lo primero que
>hace es crear el archivo en el que desea escribir, y si el archivo ya existe, su contenido se eliminará. (Además, no es necesario utilizarlocaten su estado de cuenta ya quegrepfunciona en archivos, no solo en STDIN).La forma correcta de hacerlo es utilizar un archivo temporal para leer o escribir. Entonces tampoco
o
trabajaría.
fuente
Al realizar la redirección al mismo archivo (
>), el shell puede crear / truncar el archivo antes de quecatse invoque el comando y se lea la entrada (consulte: ¿Por qué no funciona "ordenar archivo1> archivo1"? ). Si desea filtrar el archivo, es mejor redirigir la salida a un archivo diferente, o evitar la redirección, por ejemplo:La forma mejor y más segura es utilizar editores in situ diseñados para ese tipo de operaciones, p. Ej.
o usar
ex(parte de Vim):Relacionado:
fuente