1

我有一个从数据库中提取的大型多行文件,该文件具有由逗号分隔的字段,如果该字段具有多个值,则值由“|”分隔

示例输入:

姓名,职务,email1|email2|email3,电话,地址

在 shell 脚本中,我需要删除“|email2|email3”

示例输出:

姓名、职务、电子邮件 1、电话、地址

我需要对文件中的每一行执行此操作。

4

4 回答 4

2

尝试sed

sed "s/\|[^,]*//g"

结果:

h2co3-macbook:~ h2co3$ echo "name,title,email1|email2|email3,phone,address" | sed "s/\|[^,]*//g"
name,title,email1,phone,address
h2co3-macbook:~ h2co3$ 
于 2013-06-06T20:12:48.490 回答
1

使用 sed:

sed -i 's/|[^,]*//g' filename

请注意,在大多数正则表达式风格|中,是一个指定交替的特殊字符,并且要匹配|您需要使用的文字\|。这不是 sed 的情况,要匹配您使用的文字和|您使用|的交替\|(除非指定了扩展的正则表达式选项)。

于 2013-06-06T20:13:15.340 回答
1

将 sed 与内联选项一起使用:

sed -i.bak 's/|[^|,]*//g' inFile

现场演示:http: //ideone.com/zKUVhl

于 2013-06-06T20:13:17.547 回答
0

此答案将输入拆分为字段并输出您想要的字段。

awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file
于 2013-06-07T00:05:53.393 回答