grep 未按预期工作

grep 未按预期工作

我试图理解 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

相关内容