假设我想匹配一个模式,其中A和B的字符数完全相同,这样正好有n个A,后面跟着n个B。例如,可以匹配以下字符串。
- AB公司
- AABB公司
- AAABBB公司
另一方面,这些字符串无法匹配
1.建筑事务所 - AAABB公司
1.澳大利亚广播公司
1.阿巴
为了解决这个问题,我考虑的是重复计数,所以我的尝试看起来像这样
egrep 'A{n}B{n}'
然而,当然,花括号内的重复计数n不能被隐含地定义。
虽然我知道如何编写程序来匹配它,但我正在Mac终端上测试它,因此我试图利用egrep的任何可能的特性来编写一个句型。
因此,任何人都可以请帮助我解决这个问题,任何帮助将不胜感激。
4条答案
按热度按时间4ioopgfo1#
如果您有
gnu grep
,则可以使用以下递归PCRE正则表达式:或者,您可以使用
awk
来使用此非正则表达式方法:此
awk
使用index
函数查找第一个B
,并提取2个子字符串(即所有As
和所有Bs
),如果As
子字符串的长度与Bs
子字符串的长度相同,则打印每个记录。qyzbxkaa2#
两种可供选择的GNUawk方法:
--使用
match
函数:--使用
FPAT
变量定义字段值输出(对于两种方法):
8tntrjer3#
我们可以在
awk
中完成此操作,使用您显示的示例,请尝试以下awk
。在GNUawk
中编写和测试,应该可以在任何版本的awk
中工作。ujv3wf0j4#
如果这些行 * 只有 * A和B,没有其他内容,那么这里有一个基于
awk
的解决方案,不需要使用match()
函数:|
这可以通过视觉快速检查: