我试图理解 grep 如何决定将 $ 作为正则表达式或可搜索字符。我的结果表明 grep 在决定 $ 的含义时不一致。
因此,我做了一个基本的例子:
$ cat testfile
$illy
$unset
在这里我想看看是否可以使用正则表达式抓取以“illy”结尾的行:
$ grep 'illy$' testfile
$illy
它似乎有效,并且它将“illy$”条件解释为 $ 是一个正则表达式,表示“匹配行尾的这个表达式”。所以我现在的想法是,grep 将 $ 解释为正则表达式条件,而不是字符串。所以如果我想尝试 grep 查找“$illy”,那么这不应该匹配任何东西,因为它将 $ 解释为正则表达式。
然而:
$ grep '$illy' testfile
$illy
为什么它会找到这一行?这证明 grep 甚至不知道如何解释字符 $。更不用说我自己试图理解它了。
答案1
grep
默认使用基本正则表达式(BRE),并且$
是 BRE 中仅位于表达式末尾的特殊字符。
如果要将grep
模式作为扩展正则表达式处理,请使用-E
选项
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see
below).
-
pilot6@Pilot6:~$ grep '$illy' test
$illy
pilot6@Pilot6:~$ grep -E '$illy' test
pilot6@Pilot6:~$
pilot6@Pilot6:~$ grep 'illy$' test
$illy
pilot6@Pilot6:~$ grep -E 'illy$' test
$illy