【发布时间】:2020-12-23 06:21:23
【问题描述】:
给定一组模式A = {a_1, a_2, ..., a_n},我想打印包含所有这些模式的段落:a_1、a_2、...、a_n。
- 段落以非空白字符开始,以仅包含空白字符的行结束。
- 段落中模式出现的顺序无关紧要。
假设我有以下文件
$ cat main.txt
a
b
c
a
b
b
c
c
a
a
b
c
我想打印所有包含以下模式的段落:\<a\>、\<b\>、\<c\>。也就是说,输出应该是
$ {some command here}
a
b
c
我已经编写了以下命令。但是,这会将那些仅包含空格或制表符的行视为段落的一部分(请记住,仅包含空格的行不能被视为段落的一部分)。我认为这可以通过执行一次awk 来改善。
$ awk -v RS= '/\<a\>/ {print $0,"\n"}' main.txt |\
awk -v RS= '/\<b\>/ {print $0,"\n"}' |\
awk -v RS= '/\<c\>/ {print $0}'
a
b
c
有没有更有效的方法来做到这一点?
【问题讨论】:
-
请将单词
pattern替换为string或regexp,无论您指的是哪个,在您的问题中出现的任何地方。pattern这个词是模棱两可的,所以在我们知道您的真正要求是什么(字符串或正则表达式匹配)之前,很容易提出错误的方法。还将a等更改为更具代表性的字符串,包括正则表达式元字符、其他字符串的子字符串等,因此我们有一些有用的东西可供测试。
标签: shell awk text-processing