我从Excel电子表格中提取了一个列,其中一些单元格包含多行,有些则没有。多行单元格由引号引起来。我想用“,”替换那些多行单元格中的返回值。所以我的文件看起来像这样:
"Alpha
Beta
Gamma"
123
456
"Apple
Banana
Cherry"
789
this is a single-line cell
我的目标是
Alpha, Beta, Gamma
123
456
Apple, Banana, Cherry
789
this is a single-line cell
我可以编写一个使用嵌套模式捕获这些多行单元格的模式,但是我不知道如何“深入”内部以获取反向引用。
"(([^"]+)\n)+([^"]+)"
答案 0 :(得分:0)
使用GNU awk进行多字符RS和RT:
$ awk -v RS='"[^"]+"|[^"\n]+' '$0=RT{gsub(/^\s+|\s+$|"/,""); gsub(/\n/,","); print}' file
Alpha, Beta, Gamma
123
456
Apple, Banana, Cherry
789
this is a single-line cell
答案 1 :(得分:0)
尝试:
$ sed '/^"/{:a; /"$/bb; N; ba; :b; s/\n//g}' file
"Alpha Beta Gamma"
123
456
"Apple Banana Cherry"
789
this is a single-line cell
/^"/{...}
对于以"
开头的任何行,将执行大括号中的命令。
:a
这将创建标签a
。
/"$/bb
如果当前模式空间以"
结尾,则分支到标签b
。
N
将新行读入模式空间。
ba
分支回到标签a
。
:b
这定义了标签b
。
s/\n//g
从模式空间中删除所有换行符。