我试图在文本文件的所有行末尾添加一个字符串,但是某处出现了错误。
例子:
我在文本文件中有这个:
begin--fr.a2dfp.net
begin--m.fr.a2dfp.net
begin--mfr.a2dfp.net
begin--ad.a8.net
begin--asy.a8ww.net
begin--abcstats.com
...
我跑:
sed -i "s|\x0D$|--end|" file.txt
我得到:
begin--fr.a2dfp.net--end
begin--m.fr.a2dfp.net--end
begin--mfr.a2dfp.net--end
begin--ad.a8.net
begin--asy.a8ww.net--end
begin--abcstats.com
...
该字符串仅添加到某些行中,而不会添加到其他行中。
知道为什么吗?
答案1
\x0D
是回车符,它可能在您的文本编辑器中可见也可能不可见。因此,如果您在 Windows 和 Unix/Linux 系统中编辑了文件,则可能会出现换行符的混合。如果您想可靠地删除回车符,您应该使用dos2unix
。如果您确实想在行尾添加文本,只需使用sed -i "s|$|--end|" file.txt
。
答案2
有多种方法可以做到这一点:
Perl
perl -i -pe 's/$/--end/' file.txt
sed
sed -i 's/$/--end/' file.txt
awk
awk '{$NF=$NF"--end"; print}' file.txt > foo && mv foo file.txt
壳
while IFS= read -r l; do echo "$l""--end"; done < file.txt > foo && mv foo file.txt