我需要" 1"
在文件的每一行末尾附加字符串。执行以下两个命令后,将创建一个空文件。
awk '{ print $0 " 1" }' < file.txt > file.txt
使用sed
sed 's/$/ 1/' file.txt > file.txt
这里尝试的错误是什么,你能指教吗?我正在 mac 终端中执行这些命令。
答案1
GNUsed
解决方案需要-i
内联编辑:
sed -i 's/$/ 1/' file.txt
(对于 BSD sed
,你需要sed -i ''
)
在 中awk
,您必须使用临时文件来解决这个问题:
awk '{ print $0 " 1" }' file.txt > tmp && mv tmp file.txt
事实上,sed
还创建了一个临时文件,但-i
处理该文件
问题在于awk '{ print $0 " 1" }' < file.txt > file.txt
:
重定向是在awk
获得控制权之前执行的。> file.txt
将截断文件。在终端中尝试:
>file
file
即使文件之前有内容,大小也将为零。因此awk
没有数据可从该文件中读取。这与 是同样的问题sed
。
\r
带换行符的最终解决方案:
perl -pi -e 's/\r\n|\n|\r/ 1\n/g' file.txt