我尝试了很多命令,比如:
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
-i
Linux 和 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
。