这是命令:
grep '\(2\)[[:digit:]]\{\1\}' numbers
我想要的是精确匹配数字“2”之后的 2 位数字,如果我将表达式中的数字“2”更改为“3”,则匹配 3 位数字,如果...则匹配 4 位数字
我在这里使用反向引用,但是当我执行此命令时,我有以下输出:
grep: invalid content of \{\}
我的表情怎么能改变呢?
第一个解决方案: 正如塞尔日回答的那样:
2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}
这实际上可行,但假设我有\(34\)
第一个子表达式,我希望可以反向引用该数字,这样我就不必实现 34 个案例(或更多)。
答案1
这里不允许反向引用。您必须编写描述所有可能情况的表达式,例如:
2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}
答案2
看起来您的意思是对第一个值进行硬编码,而不是根据该行的实际第一个数字来确定它。考虑这样的事情,然后:
HOWMUCH=2 grep "\($HOWMUCH\)[[:digit:]]\{$HOWMUCH\}" numbers