删除点后的所有内容并在同一文件中覆盖

删除点后的所有内容并在同一文件中覆盖

文件内容类似如下

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

我想删除点后的所有内容,并且更改应该在同一文件中覆盖

abc
asdff

尝试了以下方法,但这需要重定向到另一个文件,而我不想要

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

答案1

使用-i

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

-i[后缀], --in-place[=后缀]
就地编辑文件(如果提供了后缀则进行备份)

答案2

您不能重定向到同一个文件:明显的问题是在读取文件之前,sed "s/\..*//" Filename > Filenameshell 会打开进行写入(并覆盖它) 。Filenamesed

您需要将输出重定向到另一个文件,删除原始文件,然后将新创建的文件重命名为与原始文件相同的名称。Sed、Perl 和 AWK 可以为您完成此操作:

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

或者,你可以使用sponge

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

sponge不断缓冲从标准输入接收的内容,然后才将其写入Filename

相关内容