我在用ksh
。
temp.txt
我有一个包含一些管道分隔数据的文件。
one|two|three|four|five
abc|def|pqr|lmn|xyz
从示例中可以清楚地看出,记录以最后一列中的数据值后面的换行符结束。
但是,我希望记录以管道分隔符和换行符结束,如下所示:
one|two|three|four|five|
abc|def|pqr|lmn|xyz|
我尝试了以下命令但仍然不成功:
tr '\n' '|\n' < temp.txt
和
sed -i 's/\n/|\n/g' temp.txt
我错过了什么吗?
答案1
除非您连接了行,否则\n
不会出现在sed
的模式空间中:行尾锚点是$
。
所以对于 GNU sed:
sed -i 's/$/|/' temp.txt
答案2
您可以使用paste
:
$ :|paste -d'|' file - > new_file
one|two|three|four|five|
abc|def|pqr|lmn|xyz|
或者perl
:
perl -i.bak -ple '$_.="|"' file
答案3
使用 GNU ,您可以使用sed
以下命令替换行尾:|
sed -i 's/$/|/' temp.txt
这将匹配该行的末尾并将其“替换”为|
,但当然该行仍将结束并保持其\n
答案4
您可以使用 GNU sed
:
sed -i 's/.*/&|/' file
特殊字符&
对应于 RHS 中匹配的模式。