Содержимое файла аналогично приведенному ниже.
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
.