用管道和新行字符替换新行字符

用管道和新行字符替换新行字符

我在用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 中匹配的模式。

相关内容