Я только что побежал
cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
и я получил вывод на CLI, который я ожидал, который был все строки, readme.log
которые не содержали " Apple
" ...
Затем я побежал ...
cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
Впрочем, /opt/webapplications/Word/readme.log
пусто.
Может кто-нибудь объяснить мне, почему это произошло, или правильный путь, которым я должен был пойти по этому поводу?
Ответы:
Это произошло потому, что первое, что
>
нужно сделать, это создать файл, в который он хочет записать, и, если файл уже существует, его содержимое будет удалено. (Кроме того,cat
в вашем утверждении вообще нет необходимости использовать его, поскольку онgrep
работает с файлами, а не только с STDIN.)Правильный способ сделать это - использовать временный файл для чтения или записи. Так что либо
или
должно сработать.
источник
При выполнении перенаправления в тот же файл (
>
) оболочка может создать / обрезать файл доcat
вызова команды и чтения входных данных (см .: Почему не работает «sort file1> file1»? ). Если вы хотите отфильтровать файл, лучше перенаправить вывод в другой файл или вообще избегать перенаправления, например:Лучше и безопаснее использовать встроенные редакторы, разработанные для таких операций, например:
или используйте
ex
(часть Vim):Связанные с:
источник