Grep仅匹配多个分隔的字符串

时间:2013-01-15 23:51:37

标签: regex string grep

我有一个包含此格式的行的文件:

fieldA=value1, fieldB=value2, fieldC=value3, fieldD=value4, fieldE=value5

我对fieldA,fieldB,fieldD感兴趣。但是,fieldC可能存在也可能不存在,因此我不能使用类似的东西:

grep "field" * | awk -F"," '{print $1, $2, $4}'

我的最终目标是将这样的输出全部放在一行:

fieldA=value1, fieldB=value2, fieldD=value4

我尝试使用grep -E,但它会在不同的行中输出这些字段,并且字段之间的关联会中断。

grep -o -E "field1_=\w*|field2_=\w*|field3_=\w*"

2 个答案:

答案 0 :(得分:1)

如果您知道字段名称A,B,D grep和xargs可以完成这项工作。 (awk / sed肯定可以做到)

grep -Po "fieldA=[^,]*|fieldB=[^,]*|fieldD=[^,]*" file|xargs -n3

给你:

fieldA=value1 fieldB=value2 fieldD=value4

如果你想要输出中的逗号:

grep -Po "fieldA=[^,]*,|fieldB=[^,]*,|fieldD=[^,]*" file|xargs -n3

答案 1 :(得分:0)

sed解决方案是否可以接受?

sed 's/^\([^ ]* [^ ]*\).*\(fieldD=[^,]*\).*/\1 \2/' filename