如何删除双引号内的新行?

Ken*_*uki 6 regex bash ubuntu newline file

如何"从文件中删除新行?

例如:

"one", 
"three
four",
"seven"
Run Code Online (Sandbox Code Playgroud)

所以,我想删除\n之间threefour.我应该使用正则表达式,还是我必须使用程序读取每个字符的文件?

Win*_*ute 17

要使用GNU awk(for RT)专门处理双引号字符串中的那些换行符并将它们留在它们之外的那些换行符:

gawk -v RS='"' 'NR % 2 == 0 { gsub(/\n/, "") } { printf("%s%s", $0, RT) }' file
Run Code Online (Sandbox Code Playgroud)

这可以通过沿着"字符拆分文件并删除每个其他块中的换行来实现.使用包含的文件

"one",
"three
four",
12,
"seven"
Run Code Online (Sandbox Code Playgroud)

这将给出结果

"one",
"threefour",
12,
"seven"
Run Code Online (Sandbox Code Playgroud)

请注意,它不处理转义序列.如果输入数据中的字符串可以包含\",例如"He said: \"this is a direct quote.\"",则它将无法按预期工作.

  • 我不得不使用``gsub(/ [\ r \n] + /,"")``来使它符合我的需要. (5认同)

fed*_*qui 5

您可以打印这些行".如果他们不这样做,请将其内容累积到变量中并稍后打印:

$ awk '/^"/ {if (f) print f; f=$0; next} {f=f FS $0} END {print f}' file
"one", 
"three four",
"seven"
Run Code Online (Sandbox Code Playgroud)

由于我们始终打印上一个文本块,因此请注意END在处理完整文件后需要打印最后存储的值.

  • 这看起来有点脆弱.如果任何内容应该出现在双引号之外(例如:"one",\n"three \nfour",\n12,\n"seven"`),它可以删除不在引号内的换行符. (2认同)