具有这样的CSV文件:
HEADER
"first, column"|"second "some random quotes" column"|"third ol' column"
FOOTER
并寻找类似的结果:
HEADER
first, column|second "some random quotes" column|third ol' column
换句话说,删除“ FOOTER”,在引号的开头,结尾和周围加引号。
到目前为止,此代码有效:
sed '/FOOTER/d' csv > csv1 | #remove FOOTER
sed 's/^\"//' csv1 > csv2 | #remove quote at the beginning
sed 's/\"$//' csv2 > csv3 | #remove quote at the end
sed 's/\"|\"/|/g' csv3 > csv4 #remove quotes around pipe
如您所见,问题在于它会创建4个额外的文件。
这是另一种解决方案,其目标是不创建额外的文件并在单个脚本中执行相同的操作。效果不是很好。
#!/bin/ksh
sed '/begin/, /end/ {
/FOOTER/d
s/^\"//
s/\"$//
s/\"|\"/|/g
}' csv > csv4
sed
将无法使用它,而只能使用简化的csv。将编程语言与可以处理实际CSV文件的库一起使用(Python / Perl / Ruby)。