Unix 替换引号内的新行

nik*_*tsa 2 regex unix bash awk sed

我试图在 Unix 中弄清楚以下内容。

我有一个csv文件分为几列,其中一些列有一些带有换行符的文本。通常文本以引号开头和结尾。我想消除引号之间的那些换行符,以便文本显示在一行中。

例如内容如下所示:

HEADER1, HEADER2, HEADER3, HEADER4
data1, data2, data3, "Text here with
new line 
characters"
Run Code Online (Sandbox Code Playgroud)

我希望它显示如下:

HEADER1, HEADER2, HEADER3, HEADER4
data1, data2, data3, "Text here with new line characters"
Run Code Online (Sandbox Code Playgroud)

我尝试使用awk和等工具sed,但运气不佳。

感谢任何帮助

kdh*_*dhp 6

ORS当行中的引号不平衡时,可以切换 ,替换引用文本中的新行。它不适用于 C 样式的转义引号\",但 CSV 文件中转义引号的正常样式可以使它们保持平衡""RFC4180 2.7)。

awk -F'"' 'NF&&NF%2==0{ORS=ORS==RS?" ":RS}1' file.csv
Run Code Online (Sandbox Code Playgroud)