sed脚本删除所有字符到&包括第二个逗号在一条线上

时间:2009-11-22 18:00:52

标签: sed

任何人都可以解释如何使用sed删除所有字符到&包括CSV文件中一行的第二个逗号?

典型行的开头可能看起来像

1234567890,ABC / DEF,并且第一列中的位数变化,即可能以随机顺序存在9或10或11个单独的数字,并且第二列中的字母也可以是随机的。这种随机性和变化的长度使得无法使用任何显式模式搜索。

3 个答案:

答案 0 :(得分:7)

你可以像这样用sed做这个

sed -e 's/^\([^,]*,\)\{2\}//'

不是100%肯定语法,我尝试过,它似乎工作。它会删除零或多个任何东西 - 但是逗号后跟一个逗号,所有这些都会连续两次匹配。

但更容易使用cut,就像这样

cut -d, -f3-

将使用逗号作为分隔符,并打印字段3及以上。

修改:
只是为了记录,sed和cut都可以使用文件作为参数,只需将它附加到最后就像这样

cut -d, -f3- myfile.txt

或者您可以通过它们管道程序的输出

./myprogram | cut -d, -f3-

答案 1 :(得分:2)

sed不是工具的“正确”选择(虽然可以做到)。由于您具有结构化数据,因此可以使用字段/分隔符方法而不是创建复杂的正则表达式。

你可以使用剪切

$ cut -f3- -d"," file

或gawk

$ gawk -F"," '{$1=$2=""}1'  file
$ gawk -F"," '{for(i=3;i<NF;i++) printf "%s,",$i; print $NF}'  file

答案 2 :(得分:0)

感谢所有回复 - 在提供的帮助下,我已经编写了下面的简单可执行脚本,它可以满足我的需求。

#!/bin/bash
cut -d, -f3- ~/Documents/forex_convert/input.csv |
sed -e '1d' \
-e 's/-/,/g' \
-e 's/ /,/g' \
-e 's/:/,/g' \
-e 's/,D//g' > ~/Documents/forex_convert/converted_input

exit