Содержимое файла аналогично приведенному ниже
abc.w.f.com
asdff.d.f.com
..........
Я хочу удалить все после точки и изменения должны быть перезаписаны в том же файле
abc
asdff
Попробован ниже, но для этого требуется перенаправление другой файл, который мне не нужен
sed "s/\..*//" Filename > File2
Вы не можете перенаправить на тот же файл: очевидная проблема с sed "s/\..*//" Filename > Filename
заключается в том, что оболочка открывает Filename
для записи (и перезаписывает его) до того, как файл будет прочитан sed
.
Вам нужно будет перенаправить вывод в другой файл, удалить исходный файл, а затем переименовать вновь созданный файл так же, как и исходный. Sed, Perl и AWK могут сделать это для вас:
sed -i
perl -i
awk -i inplace
Кроме того, вы можете использовать sponge
:
sed "s/\..*//" Filename | sponge Filename
sponge
продолжать буферизовать то, что он получает от стандартного ввода, и только затем записывает его в Filename
.
Используйте -i
:
sed -i 's/\..*$//' Filename
-i [SUFFIX], --in-place [= SUFFIX]
редактировать файлы в место (делает резервную копию, если SUFFIX поставляется)