Удалить все после точки и перезаписать в том же файле

Удалить все после точки и перезаписать в том же файле

Содержимое файла аналогично приведенному ниже.

abc.w.f.com
asdff.d.f.com
..........

Я хочу удалить все после точки, и изменения должны быть перезаписаны в том же файле.

abc
asdff

Попробовал ниже, но это требует перенаправления на другой файл, что мне не нужно

sed "s/\..*//" Filename  > File2

решение1

Использовать -i:

sed -i 's/\..*$//' Filename

-i[СУФФИКС], --in-place[=СУФФИКС]
редактировать файлы на месте (создает резервную копию, если указан SUFFIX)

решение2

Вы не можете выполнить перенаправление на тот же файл: очевидная проблема заключается в sed "s/\..*//" Filename > Filenameтом, что оболочка открывается Filenameдля записи (и перезаписывает ее) до того, как файл будет прочитан sed.

Вам нужно будет перенаправить вывод в другой файл, удалить исходный файл, а затем переименовать вновь созданный файл так же, как и исходный. Sed, Perl и AWK могут сделать это за вас:

  • sed -i
  • perl -i
  • awk -i inplace

В качестве альтернативы вы можете использовать sponge:

  • sed "s/\..*//" Filename | sponge Filename

spongeпродолжает буферизировать то, что получает из стандартного ввода, и только затем записывает это в Filename.

Связанный контент