2013-01-15 76 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 
相關問題