我有一个包含此格式的行的文件:
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*"
答案 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