使用sed从CSV中删除列

时间:2014-08-08 15:16:08

标签: shell sed

我有一个文件,其中字段用双引号封装 - 文件的一般示例:

"Internal ID", "External ID", "Name"
"123", "ABC", "ABC Incorporated"

期望的结果,删除第一列并使用相同的名称保存文件:

"External ID", "Name"
"ABC", "ABC Incorporated"

上面的sed可以修改为处理“,”分隔符吗?如果是这样,怎么样?还是有更好的选择吗?仍然是一个贝壳菜鸟但我尝试了以下但没有成功:

    sed -i 's/[^'\"','\"']*,//' file.csv

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:2)

你可以试试下面的sed命令,

$ sed 's/^.*\(".*", ".*"\)$/\1/' file
"External ID", "Name"
"ABC", "ABC Incorporated"

打印最后两个值。

$ sed 's/^"[^"]*", //' file
"External ID", "Name"
"ABC", "ABC Incorporated"

它删除逗号分隔字符串中的第一个值。

答案 1 :(得分:0)

快捷方式:

sed 's/[^,]*,\s*//' file
"External ID", "Name"
"ABC", "ABC Incorporated"

请注意,如果您的字段包含逗号"ABC,DEF","ABC Incor.."

,则会失败

答案 2 :(得分:0)

这是cut的工作。

 cut -d, -f 2- < file.csv

使用shell重命名输出。或者在sed edit file in place使用名为inline的脚本,并调用cut:

inline file.csv cut -d, -f 2-

答案 3 :(得分:0)

使用Awk:

awk -F", " '{print substr($0, index($0,$2))}' file > tmp && mv tmp file