我有要求,只要脚本匹配' host2',我希望它打印模块名称(方括号内的文本),其中' host2'已列出。我知道grep -B会在字符串匹配之前得到文本,但是我的文件不符合标准模式。在这种情况下如何在字符串匹配之前的大括号中获取文本?
[network]
host1
host2
[webserver]
host1
host9
host7
host5
host6
host2
[db]
host11
host19
Output would be :
network
webserver
答案 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