我有一个从数据库中提取的大型多行文件,该文件包含以逗号分隔的字段,如果该字段有多个值,则值以“|”分隔
名,标题,EMAIL1 | EMAIL2 | EMAIL3,电话,地址
在shell脚本中,我需要删除“| email2 | email3”
名,标题,EMAIL1,电话,地址
我需要为文件中的每一行执行此操作。
答案 0 :(得分: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$
答案 1 :(得分:1)
使用sed:
sed -i 's/|[^,]*//g' filename
请注意,在大多数正则表达式中,|
是一个特殊字符,用于指定替换,并匹配您需要使用|
的文字\|
。对于sed来说不是这种情况,要匹配使用|
的文字|
,要使用\|
进行替换(除非指定了扩展的正则表达式选项)。
答案 2 :(得分:1)
答案 3 :(得分:0)
此答案将输入拆分为字段并输出您想要的字段。
awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file