【问题标题】:How to replace ALL newline characters in CSV file including the very last one如何替换 CSV 文件中的所有换行符,包括最后一个
【发布时间】:2018-11-05 00:55:06
【问题描述】:

我想用更长的字符串替换每行中的'\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 文件如下所示:

如何替换所有 \n 字符?

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

【问题讨论】:

  • awk '{print $0"____"}' /tmp/test.csv怎么样
  • 谢谢!这也是一个很好的解决方案。但我必须在这里使用 sed ......
  • Stack Overflow 不是代码编写服务。请出示您的代码。由于 Stack Overflow 向您隐藏了关闭原因:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example。

标签: linux bash sed tr


【解决方案1】:

我知道你问的不是 Perl,但它非常适合这个 —

perl -pe 's/$/____/' foo.csv
  • perl -pe 为每个给定输入文件(或标准输入)的每一行运行给定代码,然后打印结果行。代码可以在输出前修改行。
  • 在代码中,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"____

抱歉,格式很奇怪——由于某种原因,四个空格对我不起作用。

【讨论】:

  • 不,我不能使用 Perl,抱歉。
  • @user1802693 好吧。我看到至少已经有另一个答案了,所以我希望其中一个有效!
【解决方案2】:

使用sed:

$ cat > foo
this
that
$ sed 's/$/__/g' foo
this__
that__

$ sed 's/$/__/g' foo | hexdump -C
00000000  74 68 69 73 5f 5f 0a 74  68 61 74 5f 5f 0a        |this__.that__.|

0a 到底。​​p>

附言。注意useless cat 的缺失。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2013-10-19
    • 1970-01-01
    • 2017-06-04
    • 2019-11-05
    • 1970-01-01
    • 2015-03-28
    • 2019-03-21
    • 2022-11-23
    相关资源
    最近更新 更多