grep 没有按预期工作

joh*_*ith 1 regex grep

我试图了解 grep 如何决定将 $ 作为正则表达式或可搜索字符。我的结果表明 grep 不一致地决定 $ 的含义。

因此,我做了一个基本的例子:

$ cat testfile
$illy
$unset
Run Code Online (Sandbox Code Playgroud)

在这里,我想看看是否可以使用正则表达式抓取以“illy”结尾的行:

$ grep 'illy$' testfile
$illy
Run Code Online (Sandbox Code Playgroud)

它似乎有效,并且将 'illy$' 标准解释为 $ 是一个正则表达式,表示“在行尾匹配此表达式”。所以我现在的想法是,grep 将 $ 解释为正则表达式标准,而不是字符串。因此,如果我想尝试 grep '$illy',那么这不应该匹配任何内容,因为它将 $ 解释为正则表达式。

然而:

$ grep '$illy' testfile
$illy
Run Code Online (Sandbox Code Playgroud)

为什么会找到这条线?这证明即使是grep 也不知道如何解释字符$。更不用说,我自己试图理解它。

Pil*_*ot6 5

grep默认情况下使用基本正则表达式(BRE),并且$是 BRE 中仅在表达式末尾的特殊字符。

如果要将grep模式作为扩展正则表达式处理,请使用-E选项

-E, --extended-regexp
              Interpret PATTERN as an extended regular  expression  (ERE,  see
              below).
Run Code Online (Sandbox Code Playgroud)

——

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
Run Code Online (Sandbox Code Playgroud)