如何删除文件中所有引号文本中的换行符?

6 投票
5 回答
5238 浏览
提问于 2025-04-17 06:47

我从数据库导出了一个CSV文件。里面有些字段是比较长的文本,可能会包含换行符。我想知道,最简单的方法是什么,能把这个文件中双引号内的换行符去掉,但保留其他的换行符。

我不在乎是用一个简单的Bash命令还是一个小脚本,只要能有效解决问题就行。

举个例子,

"Value1", "Value2", "This is a longer piece
    of text with
    newlines in it.", "Value3"
"Value4", "Value5", "Another value", "value6"

长文本中的换行符应该被去掉,但用来分隔两行的换行符要保留。

5 个回答

2

这个方法很简单,但可能对你有用:

# cat <<\! | sed ':a;/"$/{P;D};N;s/\n//g;ba'                            
> "Value1", "Value2", "This is a longer piece
>     of text with
>     newlines in it.", "Value3"
> "Value4", "Value5", "Another value", "value6"
> !
"Value1", "Value2", "This is a longer piece    of text with    newlines in it.", "Value3"
"Value4", "Value5", "Another value", "value6"
7

这里有一个用Python写的解决方案:

import re
pattern = re.compile(r'".*?"', re.DOTALL)
print pattern.sub(lambda x: x.group().replace('\n', ''), text)

你可以在线查看它的运行效果: ideone

7

在Python中:

import csv
with open("input.csv", newline="") as input, \
        open("output.csv", "w", newline="") as output:
    w = csv.writer(output)
    for record in csv.reader(input):
        w.writerow(tuple(s.remove("\n") for s in record))

撰写回答