我试图了解 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 也不知道如何解释字符$。更不用说,我自己试图理解它。
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)