如何替换CSV文件中的所有换行符,包括最后一个

时间:2018-05-25 15:15:56

标签: linux bash sed tr

我想用更长的字符串替换每行中的'\n'个字符,例如:"___\n"

当我尝试:

$ cat /tmp/test.csv | sed ':a;N;$!ba;s/\n/____\n/g'

我得到以下输出

"00000";"29515470";"001";"001";"A6399000800";"";"";"-1";"142.72";"1.00";"1.00"____
"91930";"20029956";"001";"002";"A2128300018";"";"";"-1";"71.58";"1.00";"4.00"____
"91930";"20029962";"001";"003";"ZZ-OIL16";"";"";"-1";"14.48";"5.00";"3.00"____
"91930";"20029962";"001";"002";"A2661800009";"";"";"-1";"13.28";"1.00";"3.00"

最后一个'\ n'没有被替换。

但我的CSV文件如下所示: enter image description here

如何替换所有\n个字符?

我发现了这个: How can I replace a newline (\n) using sed? ,但是这个解决方案对我不好,因为它不能处理最后一个'\n'字符。

2 个答案:

答案 0 :(得分:3)

使用0a

Dictionary<MyType,Something>
最后

HashSet<MyType>

PS。请注意缺少useless cat

答案 1 :(得分:2)

我知道你并不是在询问Perl,但它非常适合这个 -

perl -pe 's/$/____/' foo.csv
  • perl -pe为每个给定输入文件(或stdin)的每一行运行给定代码,然后打印结果行。代码可以在输出之前修改该行。
  • 在代码中,s/$/____/在行尾添加了四个下划线。

假设所有输入行以换行符结尾,这将触及所有换行符。这是因为-p的隐式循环使用<>,其中包含代码获取的换行符。

替换有效,因为$匹配before a newline that ends a string。 DWIM!

输出:

"00000";"29515470";"001";"001";"A6399000800";"";"";"-1";"142.72";"1.00";"1.00"____
 "91930";"20029956";"001";"002";"A2128300018";"";"";"-1";"71.58";"1.00";"4.00"____
 "91930";"20029962";"001";"003";"ZZ-OIL16";"";"";"-1";"14.48";"5.00";"3.00"____
 "91930";"20029962";"001";"002";"A2661800009";"";"";"-1";"13.28";"1.00";"3.00"____

对于时髦的格式感到抱歉 - 由于某种原因,四个空间对我没有用。