首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在awk文件中构造模式

在awk文件中构造模式
EN

Unix & Linux用户
提问于 2023-02-23 16:22:25
回答 1查看 58关注 0票数 -1

我正在一个bash脚本中构建模式pn_erebeg_ereend_ere,这个脚本最终在awk脚本中使用。我希望在awk脚本中构造模式,让用户能够为famlasmb提供值,而不是传递完整的pn_erebeg_ereend_ere。我怎么能做这个改变呢?

代码语言:javascript
复制
  nfaml=${faml:-"[[:graph:]]+"}  # Use GPH if FAML null ("" or '')
  nasmb=${asmb:-"[[:graph:]]+"}  # Use GPH if ASMB null ("" or '')
  kw=".*"

  ## Pattern pn_ere matches comment characters.  ## ;; !! @c //
  local pn_ere="^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"

  beg_ere="${pn_ere}(${nfaml}) ${ebl}(${nasmb})${ebr}${spc}(${kw})$"
  end_ere="${pn_ere}END OF ${nfaml} ${ebl}${nasmb}${ebr}${spc}$"

  awk -f "${trk}"/densel -v pn_ere="$pn_ere"  \
      -v beg_ere="$beg_ere" -v end_ere="$end_ere"  \
      "$filename"
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-02-24 00:12:18

这就是你想做的(未经测试的)吗?

代码语言:javascript
复制
nfaml=${faml:-"[[:graph:]]+"}  # Use GPH if FAML null ("" or '')
nasmb=${asmb:-"[[:graph:]]+"}  # Use GPH if ASMB null ("" or '')
kw='.*'

awk -v nfaml="$nfaml" -v nasmb="$nasmb" -v kw="$kw" '
  BEGIN {
    ebl = "foo"
    ebr = "bar"
    spc = "whatever"

    ## Pattern pn_ere matches comment characters.  ## ;; !! @c //
    pn_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"

    beg_ere = sprintf("%s(%s) %s(%s)%s%s(%s)$", pn_ere, nfaml, ebl, nasmb, ebr, spc, kw)
    end_ere = sprintf("%sEND OF %s %s%s%s%s$", pn_ere, nfaml, ebl, nasmb, ebr, spc)
  }

  <... rest of script using the above ...>
' "$filename"

您也可以通过连接设置beg_ere和end_ere,例如:

代码语言:javascript
复制
beg_ere = pn_ere "(" nfaml ") " ebl "(" nasmb ")" ebr spc "(" kw ")$"

但是,当字符串很长时,使用sprintf()将格式与数据分离开来更干净/更简单。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/736628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档