2016-02-12 27 views
0

我有一个名为test的输入文件看起来像这样通配符的grep问题Ubuntu的

leonid sergeevich vinogradov 
ilya alexandrovich svintsov 

,当我用grep这样grep 'leonid*vinogradov' test它说什么,但是当我键入grep 'leonid.*vinogradov' test它给了我第一个字符串。 *.*有什么区别?因为我看不到任何数量的任何字符和任何字符后面跟着任何数量的任何字符。 我使用的是Ubuntu 14.04.3。

回答

1

*不匹配任何数量的字符,如在文件glob中。它是一个运算符,它表示之前的字符的0个或多个匹配项。正则表达式leonid*vinogradov需要v在0或更多d s之后立即出现。 .是表示任何单个字符的正则表达式metacharcter,因此.*匹配0个或多个任意字符。

+0

ty,我误解了grep中通配符的含义 – user3880400

0

grep使用正则表达式和.*匹配0个或多个任意字符

凡为'leonid*vinogradov'也被评估为正则表达式,这意味着leoni其次0以上d因此您匹配失败的。

0

这是Regular Expression grep的用法,简称为正则表达式,不是你认为的通配符。在这种情况下, ”。”表示任何字符,“”表示任意数量的(包括零)前一个字符,因此“。”意味着任何东西。

检查链接,或谷歌它,这是一个强大的工具,你会发现值得知道。