我有一个从数据库中提取的大型多行文件,该文件具有由逗号分隔的字段,如果该字段具有多个值,则值由“|”分隔
示例输入:
姓名,职务,email1|email2|email3,电话,地址
在 shell 脚本中,我需要删除“|email2|email3”
示例输出:
姓名、职务、电子邮件 1、电话、地址
我需要对文件中的每一行执行此操作。
尝试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$
使用 sed:
sed -i 's/|[^,]*//g' filename
请注意,在大多数正则表达式风格|
中,是一个指定交替的特殊字符,并且要匹配|
您需要使用的文字\|
。这不是 sed 的情况,要匹配您使用的文字和|
您使用|
的交替\|
(除非指定了扩展的正则表达式选项)。
此答案将输入拆分为字段并输出您想要的字段。
awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file