grep: \{\} 的内容无效

grep: \{\} 的内容无效

这是命令:

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

相关内容