首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用awk捕获三个区域

用awk捕获三个区域
EN

Unix & Linux用户
提问于 2023-02-24 22:07:24
回答 1查看 87关注 0票数 -2

我希望能够使用常规的exprossion来匹配文件中的下列行

代码语言:javascript
复制
## FAML [ASMB]

## FAML [ASMB] KYA

## FAML [ASMB] KYA,KYB

然后能够捕获FAMLASMB值和逗号分隔关键字KYA,KYB的顺序。

用户提供FAMLASMB以及他们想要匹配KYA,KYB等的任何关键字。

我在做

代码语言:javascript
复制
BEGIN {
  kw=".*" ; ebl="[[]" ; ebr="[]]" ; spc="[[:space:]]*"
  pn_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"
  fm = "%s(%s) %s(%s)%s(%s)%s$"
  beg_ere = sprintf(fm, pn_ere, faml, ebl, asmb, ebr, kw, spc)
}

$0 ~ beg_ere {
  fml = gensub(beg_ere, "\\2", 1, $0)
  asm = gensub(beg_ere, "\\3", 1, $0)
  kyw = gensub(beg_ere, "\\4", 1, $0)
 }

其中,(%s)用于捕获文件中的fmlasmkyw,以匹配famlasmbkw的任何用户输入。

行匹配将在注释部分的源代码文件上执行,从双注释字符##;;!!//@c开始。

因此,用户可以调用

代码语言:javascript
复制
awk -f densel -v faml="HD" -v asmb="OPCON" galex.el

例如,考虑一个emacs文件galex.el

代码语言:javascript
复制
;; HD [TEST]

(defun galex-insert (n)
  "Copy line N at current point.
N is the numeric prefix arg"
  (interactive "p")
  (save-excursion
    (goto-char (point-min))
    (forward-line (1- n))
    (kill-ring-save (line-beginning-position) (line-end-position))))

;; HD [OPCON]

(message "\nGALEX")

;; HD [OPCON] elisp,resource

(message "\nGALEX")

然后,regexp将匹配;; HD [OPCON];; HD [OPCON] elisp,resource行。

如果用户指定

代码语言:javascript
复制
awk -f densel -v faml="HD" -v asmb="OPCON" -v kw="resource"  galex.el

只有下面一行才能匹配

代码语言:javascript
复制
;; HD [OPCON] elisp,resource
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-02-25 00:02:09

您的问题还不清楚,但这可能是您想要做的事情(使用GNU进行第三次match()):

代码语言:javascript
复制
$ cat tst.awk
BEGIN {
    re = "#+ ([^ ]+) ([[][^]]*]) *(.*)"
}
match($0,re,a) {
    for (i=1; i in a; i++) {
        print i, a[i]
    }
    print ""
}
代码语言:javascript
复制
$ awk -f tst.awk file
1 FAML
2 [ASMB]
3

1 FAML
2 [ASMB]
3 KYA

1 FAML
2 [ASMB]
3 KYA,KYB

显然,只需将您喜欢的任何变量分配给a[1]的内容,等等。

更改regexp以满足您的需要,这只是为了以最小的方式演示我认为的问题和解决方案,并向您展示如何创建最小可重现性示例如果/当您将来需要问其他问题时。

有关该函数的功能,请参阅match() in https://www.gnu.org/software/gawk/manual/gawk.html#String-Functions

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

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

复制
相关文章

相似问题

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