我有一个文件,基本上我需要grep返回与特定值关联的“键”。
例如,如果我有:
[abc]
field1=34234
field2=t2342
[def]
field1=44354
field2=23423
我希望能够grep,例如23423,然后在[def]
上进行基本匹配,然后返回/打印出括号中的内容(例如def
)。
文件的格式是这样的,如果要这样做,我想在grep参数之前匹配包含[
和]
的第一行 。 / p>
我发现this question与此类似,其中-B 1
将为您提供前一行,并且可以使用其中的一些变体来防止比赛前出现一些行。
问题是我不能指望比赛和第一行之间有括号的确切行数,所以我想避免这样做,而只匹配包含括号的第一行。
>这可能与grep或类似的bash实用程序有关吗?
答案 0 :(得分:2)
我建议一遍阅读这些段落,一旦一个段落包含一个搜索值,请获取没有[
和]
的第一字段:
awk -v RS= '/23423/{gsub(/[][]/, "", $1); print $1}' file
请注意,[][]
与[
或]
匹配。
或者,获取第一个字段,其中包含[
和]
修剪的内容:
awk -v RS= '/23423/{print substr($1, 2, length($1)-2)}' file
请参见online awk
demo。