【发布时间】:2021-02-27 14:29:24
【问题描述】:
我有一个名为 grepExamples 的文件,例如:
ALUMNI=([123]="Jonas" [124]="Anna")
TEACHERS=([123]="John" [124]="Carol")
读作
ALUMNI=(
[123]="Jonas"
[124]="Anna"
)
TEACHERS=(
[123]="John"
[124]="Carol"
)
我想创建一个函数来提取名称,给定角色和 id
我尝试使用 greps 之类的
grep -HiRE "(ALUMNI)[^)]*((123)\W+)([A-Z][a-z]+)(\")" --include \grepExamples
grep -HiRE "(ALUMNI)[^)]*((124)\W+)([A-Z][a-z]+)(\")" --include \grepExamples
这让我可以识别我感兴趣的字符串部分
等等
grep -HiRE "(ALUMNI)[^)]*((123)\W+)" --include \grepExamples
grep -HiRE "(ALUMNI)[^)]*((124)\W+)" --include \grepExamples
这允许我指向我需要的值之前的文本
但如果我尝试通过管道连接到 awk,我本身无法获得名称
第一个例子
$ grep -HiRE "(ALUMNI)[^)]*((123)\W+)" --include \grepExamples
grepExamples:ALUMNI=([123]="Jonas" [124]="Anna")
$ grep -HiRE "(ALUMNI)[^)]*((123)\W+)" --include \grepExamples | awk '{ print $1; }'
grepExamples:ALUMNI=([123]="Jonas"
$ grep -HiRE "(ALUMNI)[^)]*((123)\W+)" --include \grepExamples | awk '{ print $2; }'
[124]="Anna")
不知道如何继续...
我只想搜索 alumni 123,然后找到 Jonas o 给老师 124 找卡罗尔 (等等)
【问题讨论】:
-
那么,预期的输出是什么?
-
对于校友 123,乔纳斯
-
请编辑完整的预期输出到原始帖子。谢谢。
-
我刚刚在帖子里做了
-
我不完全确定您的问题,但
grep -ioP 'alumni.*\[123]="\K[^"]+(?=")'和grep -ioP 'teacher.*\[124]="\K[^"]+(?=")'是否为您提供了预期的输出? (这不需要 awk,我假设你有 GNU grep 和 PCRE 选项可用)
标签: regex bash ubuntu awk grep