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

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

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

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

abc
asdff

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

sed "s/\..*//" Filename  > File2
1
задан 18 June 2019 в 10:35

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.

0
ответ дан 18 June 2019 в 10:35

Используйте -i:

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

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

1
ответ дан 18 June 2019 в 10:35

Другие вопросы по тегам:

Похожие вопросы: