我读到过,分组将表达式视为单个单元。这是什么意思?
此外,grep "\(grouping\)" file.txt
或者grep -E "(grouping)" file.txt
做什么?我还读到表达式是用括号分组的。同样,什么是分组表达式?
当我运行该命令时,它会grouping
在文件中突出显示。grep "\(grouping\)"
与 有何不同grep grouping
?
答案1
本质上,它使括号内的内容被视为单个原子。例如,如果你想应用量词,这很有用。比较:
$ printf 'groupinggrouping' | grep -Eo "grouping*"
groupingg
(其中*
仅适用于g
)与
$ printf 'groupinggrouping' | grep -Eo "(grouping)*"
groupinggrouping
其中*
应用于整个子模式grouping
。
在大多数(全部?)正(grouping)
则表达式方言中,捕获匹配的文本进入索引捕获组,允许它随后反向引用。这没有太多的应用grep
——最明显的是检测重复元素例如。
$ printf 'ba\nbb\nbc\n' | grep '\(.\)\1'
bb
匹配后面跟着相同字符的任何单个字符。在模式替换的上下文中(sed
例如,而不是grep
),捕获组也可以在替换文本中引用。
还有其他更具表现力的方言变体 - 例如 Perl 的(?:grouping)
非-捕获群组。
有关详细信息,请参阅例如