我想用更长的字符串替换每行中的'\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'没有被替换。
如何替换所有\n
个字符?
我发现了这个:
How can I replace a newline (\n) using sed?
,但是这个解决方案对我不好,因为它不能处理最后一个'\n'
字符。
答案 0 :(得分:3)
答案 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"____
对于时髦的格式感到抱歉 - 由于某种原因,四个空间对我没有用。