0

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

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*"
4

2 回答 2

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
于 2013-01-16T00:20:56.423 回答
0

sed解决方案可以接受吗?

sed 's/^\([^ ]* [^ ]*\).*\(fieldD=[^,]*\).*/\1 \2/' filename
于 2013-01-16T00:07:43.740 回答