2013-01-15 32 views
0

我有一个包含这种格式行的文件:的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*" 
+1

是那些3个字段的名字(A ,B和D)是否固定?或者一切都是动态的? – Kent

+0

肯特,所有的领域是固定的(A,B,.. D),但价值观不是。 –

回答

0

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

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

谢谢你的帮助。我能够用sed提出一个类似的解决方案。 –

0

如果您知道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