在模式匹配之前为非标准文件打印字符串

时间:2017-09-25 09:46:05

标签: linux bash shell

我有要求,只要脚本匹配' host2',我希望它打印模块名称(方括号内的文本),其中' host2'已列出。我知道grep -B会在字符串匹配之前得到文本,但是我的文件不符合标准模式。在这种情况下如何在字符串匹配之前的大括号中获取文本?

[network]
host1
host2
[webserver]
host1
host9
host7
host5
host6
host2
[db]
host11
host19


Output would be :
network
webserver

3 个答案:

答案 0 :(得分:2)

您可以使用此awk命令:

awk '/^\[.*\]/{gsub(/[][]/, ""); m=$0} $1=="host2"{print m}' file

network
webserver

答案 1 :(得分:0)

this

怎么样?
[\[a-zA-Z]+]((?=[\n\w]+host2))

答案 2 :(得分:0)

awk '{gsub(/[\[\]]/,"")}$1~/network|webserver/' file

network
webserver