删除“|”之间的文本分隔符和“,”分隔符使用shell脚本

时间:2013-06-06 20:10:17

标签: regex unix sh ksh

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

示例输入:

  

名,标题,EMAIL1 | EMAIL2 | EMAIL3,电话,地址

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

示例输出:

  

名,标题,EMAIL1,电话,地址

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

4 个答案:

答案 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)

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

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

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

答案 3 :(得分:0)

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

awk -F'[|,]' -v OFS=, '{print $1, $2, $3, $(NF-1), $NF}' file