擅长:python、mysql、java
<p>如果要搜索的字符串分别分配给“v1”和“v2”</p>
<pre><code>$ v2="a: asd"; v1="d: def"
$ awk -v v1="$v1" -v v2="$v2" '/\*\*.*\*\*/{s=substr($0,match($0,/\*\*.\:/)+2,1);next}{a[s]=a[s] $0}END{for(i in a)if(match(a[i],v1)&&match(a[i],v2))print i}' test.txt
A
C
</code></pre>
<p>一个衬垫可以按下面的块扩展</p>
<pre><code>$ cat awk-script
/\*\*.*\*\*/{
s=substr($0,match($0,/\*\*.\:/)+2,1);
next
}
{
a[s]=a[s] $0
}
END{
for(i in a)
if(match(a[i],v1)&&match(a[i],v2))
print i
}
$ awk -v v1="$v1" -v v2="$v2" -f awk-script test.txt
A
C
</code></pre>
<p>简要说明</p>
<ul>
<li><code>/\*\*.*\*\*/</code>:搜索主要条目</li>
<li><code>s=substr($0,match($0,/\*\*.\:/)+2,1)</code>:将主条目的值赋给's'</li>
<li><code>a[s]=a[s] $0</code>:分配属于每个主条目的记录</li>
<li><code>match(a[i],v1)&&match(a[i],v2)</code>:检查“v1”和“v2”是否与每个主条目中的值匹配。你知道吗</li>
</ul>