我有一些文件具有以下结构。我想打印当前的整个部分。输入可以是其他标题或关键字。
## DN [TITLE] KEYWORD,KEYWORD
## text line
## another text line
## DN [TITLE] ends here
考虑这个文件
some text
## DN [Opcon] bash,recources
## text line
## another text line
## DN [Opcon] ends here
more text
当用户指定Opcon
、bash
或 时recources
,该部分将打印在终端中。
获取输出
## DN [Opcon] bash,recources
## text line
## another text line
## DN [Opcon] ends here
对于搜索模式,我构建了以下内容,ptn
即模式匹配
## DN [TITLE] KEYWORD,KEYWORD
。
dpn='[[:space:]]*([#;!]+|@c|//)[[:space:]]DN[[:space:]]\[.*\]'
kpn='[[:space:]][^,]+(,[^,]+)*'
ptn="^($dpn)($kpn)?$"
已经做了初步尝试awk
dn_ere='^[[:space:]]*([#;!]+|@c|//)[[:space:]]DN[[:space:]]\[.*\]'
beg_ere="${dn_ere} ${keyword}$"
end_ere="${dn_ere} ends here$"
awk -v begpn="$beg_ere" -v endpn="$end_ere" \
'$0 ~ begpn { insc=1; next }
$0 ~ endpn { insc=0; print "" }
insc { print }' "$efile"
困难在于匹配keyword
in,beg_ere
因为我不知道匹配是在第一个关键字中,还是在第二个关键字中,等等。