任何人都可以解释如何使用sed删除所有字符到&包括CSV文件中一行的第二个逗号?
典型行的开头可能看起来像
1234567890,ABC / DEF,并且第一列中的位数变化,即可能以随机顺序存在9或10或11个单独的数字,并且第二列中的字母也可以是随机的。这种随机性和变化的长度使得无法使用任何显式模式搜索。
答案 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