为了能够将一些数据导入某个工具,我必须从这种格式转换一个 CSV 文件
"data","data","data data","data","123"
Run Code Online (Sandbox Code Playgroud)
变成这种格式
data;data;data data;data;123
Run Code Online (Sandbox Code Playgroud)
列从不包含任何",;或者,但可以有空格。目前我使用以下
sed -e 's/","/;/g' -e 's/"//g' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)
虽然这很好用,但我想知道这是否可以更优雅地完成,即
感谢您的输入!
( tr , ';' | tr -d '"' ) < input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)
我会使用 Perl
perl -pe 'tr/,"/;/d' input.csv > output.csv
Run Code Online (Sandbox Code Playgroud)
-- 但是这个特定的任务并没有超出 sed 的范围。您不能合并这两个表达式。
您更喜欢哪个(perl、sed、awk)取决于您;他们都会完成工作。既然你要了 sed,而其他人已经发布了,那么你去吧。这是正则表达式的更简单形式,适用于您的示例行:
$ sed -e 's/"//g; s/,/;/g' infile.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)
请注意,您可以在每次替换后用分号连接这两个表达式。使用 GNU sed v4.1.5 测试。
这是您加入的原始表达式:
$ sed -e 's/","/;/g; s/"//g' infile.csv > outfile.csv
Run Code Online (Sandbox Code Playgroud)
我有理由确定可以合并这两个替换。不确定它会是什么,而且我很确定结果的可读性会比顶部的脚本低得多。如果我想出了什么(或其他人在评论中权衡),我会在这里添加。