文件内容类似如下
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 > Filename
shell 会打开进行写入(并覆盖它) 。Filename
sed
您需要将输出重定向到另一个文件,删除原始文件,然后将新创建的文件重命名为与原始文件相同的名称。Sed、Perl 和 AWK 可以为您完成此操作:
sed -i
perl -i
awk -i inplace
或者,你可以使用sponge
:
sed "s/\..*//" Filename | sponge Filename
sponge
不断缓冲从标准输入接收的内容,然后才将其写入Filename
。