将文本添加到每行末尾

将文本添加到每行末尾

我尝试了很多命令,比如:

sed -i '' "s/$/<@string>/" txt.txt > txt2.txt

这使得 txt2.txt 为空,为什么?!?

sed 's/$/<@string>/' txt.txt > txt2.txt

这绝对没有任何作用,并告诉我该路径<string>不存在。

那么我该怎么办,我使用 bsd sed 因为我使用的是 OS X。

答案1

-i开关导致sed编辑原始文件。这意味着没有输出,并且由于没有输出,因此您的重定向会导致空文件。

所以,你想要的是

sed -i '' 's/$/<@string>/' txt.txt

这将改变原来的txt.txt.要不就

 sed 's/$/<@string>/' txt.txt > txt2.txt

答案2

-iLinux 和 Unix 之间的选项sed不太兼容,并且可能在其他操作系统上不可用。

其次,你不能-i和IO重定向(>)一起使用,因为它排除了它本身。使用就地编辑已经修改了文件。

因此,如果您想就地编辑文件(到同一个文件中),最好使用ex:

ex +"%s/$/<@string>/g" -cwq foo.txt

要替换字符串并写入另一个文件,请尝试:

ex +"%s/$/<@string>/g" +"w another.txt" -cq! foo.txt

该命令ex相当于vi -e

相关内容