今天写命令时本想查找最后带标点的句子,结果发现不带引号时无法识别
grep -n \.$ exp:
grep -n '\.$' exp:
貌似不加单引号无法达到我们想要的效果,上网搜了一下,有人说是因为引号的作用,其实这在shell变量中就有介绍,明显的是,这里单引号起到了转义的作用,并不像变量中提到的说双引号可转义,单引号保持原样,我在网上查了一下,看到有人在论坛上的回答,整理一下,事实是这样;
linux中的单引号和双引号的确对转义字符有不同的分别,但前提是系统的转义字符,例如:$,>,<等(系统保留字),Linux的系统保留字很多
而grep对单引号和双引号对grep一样,是因为设计时grep天生支持正则表达式,所以在grep看来,它的转义字符包括两部分,一部分就是系统保留字,另一部分就是正则表达式的转义字符,比如,^是正则表达式的转义字符,但由于他并非系统保留字,所以对它来讲,单引号和双引号都是一样的,但是不加引号就不起作用。但如果你要查找的信息中包含$,例如:"$boy"和'$boy‘'那可就不一样,
因此,对于系统保留字,grep依然满足不同引号的不同用法,但是对正则表达式的转义字符,则对引号不敏感,因此这告诉我们,以后将系统保留字与正则表达式混用时,正则表达式尽量按照规则来写
还是回到问题本身,如果搜索内容中有空格,则需要使用单引号或者双引号把搜素内容引起来!@H_301_20@
笔者一般在使用grep时都老老实实的多输入两个单引号。
原文链接:https://www.f2er.com/regex/360483.html