在终端中打印分段零件

在终端中打印分段零件

我有一些文件具有以下结构。我想打印当前的整个部分。输入可以是其他标题或关键字。

## 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

当用户指定Opconbash或 时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"

困难在于匹配keywordin,beg_ere因为我不知道匹配是在第一个关键字中,还是在第二个关键字中,等等。

相关内容