如何替换 CSV 文件中的所有换行符,包括最后一个
How to replace ALL newline characters in CSV file including the very last one
我想用更长的字符串替换每行中的 '\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'
字符。
我知道你问的不是 Perl,但它非常适合这个 —
perl -pe 's/$/____/' foo.csv
perl -pe
为每个给定输入文件(或标准输入)的每一行运行给定代码,然后打印结果行。代码可以在输出之前修改行。
- 在代码中,
s/$/____/
在行尾添加了四个下划线。
假设所有输入行都以换行符结尾,这将命中所有换行符。这是因为 -p
的隐式循环使用 <>
,它在您的代码中包含换行符。
替换有效,因为 $
匹配 before a newline that ends a string。昏昏欲睡!
输出:
"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"____
抱歉格式不对——四space出于某种原因对我不起作用。
使用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
最后。
PS。注意缺少 useless cat
.
我想用更长的字符串替换每行中的 '\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'
字符。
我知道你问的不是 Perl,但它非常适合这个 —
perl -pe 's/$/____/' foo.csv
perl -pe
为每个给定输入文件(或标准输入)的每一行运行给定代码,然后打印结果行。代码可以在输出之前修改行。- 在代码中,
s/$/____/
在行尾添加了四个下划线。
假设所有输入行都以换行符结尾,这将命中所有换行符。这是因为 -p
的隐式循环使用 <>
,它在您的代码中包含换行符。
替换有效,因为 $
匹配 before a newline that ends a string。昏昏欲睡!
输出:
"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"____
抱歉格式不对——四space出于某种原因对我不起作用。
使用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
最后。
PS。注意缺少 useless cat
.