/.*/
根据书中所写的内容,我有问题理解,这会打印整行文本。我们知道这.
意味着任何字符,并且*
意味着前面的字符出现零次或多次。所以我希望 /.*/ 找到类似的东西rrr
qqqq
abbbbb
,我的意思是不断重复单个字符。
但这不是它所做的事情。为什么?
我的第二个问题是:为什么/.+/
不做同样的事情?在我正在尝试的文本中,结果是?
/.*/
根据书中所写的内容,我有问题理解,这会打印整行文本。我们知道这.
意味着任何字符,并且*
意味着前面的字符出现零次或多次。所以我希望 /.*/ 找到类似的东西rrr
qqqq
abbbbb
,我的意思是不断重复单个字符。
但这不是它所做的事情。为什么?
我的第二个问题是:为什么/.+/
不做同样的事情?在我正在尝试的文本中,结果是?
不,
*
in.*
表示“任意数量的前面的表达式”,即零个或多个与表达式匹配的任何类型的字符.
。这意味着
.*
将匹配aaaa
以及因为匹配中abcd
的所有字符。它也将匹配一个空行,因为它允许零匹配。abcd
.
如果您想查找包含重复字符的行,请使用
此表达式匹配“任何字符,然后是相同字符,然后是任意数量的相同字符”。
\1*
除非您正在寻找仅包含重复字符的行,否则可以将其删除,在这种情况下,您应该将表达式锚定到行的开头和结尾,如ed
编辑器支持基本的正则表达式。该+
修饰符是一个扩展的正则表达式修饰符。如果您使用该命令启用了错误解释,那么您在使用时?
获得的将紧随其后(或在 GNU 中)。这是因为它试图找到其中有 a 的行,前面有一些其他字符。ed
/.+/
no match
No match
ed
H
+
扩展正
.+
则表达式(“匹配一个或多个任意字符”)相当于基本正则表达式..*
,即“匹配一个字符,然后匹配零个或多个任意字符”。根据其手册,GNU
ed
应该支持\+
正则表达式,因此..*
相当于.\+
,但我的 OpenBSD 系统上的 GNUed
1.14.2 不这样做。