如何在同一grep命令中同时匹配单引号和美元符号?
在grep中匹配单引号、美元符号,以及同时搞定两者的方法
刚巧踩过这个坑,给你梳理下grep里处理这两个特殊字符的技巧,包括同时匹配的方案:
先搞定单个符号的匹配
匹配单引号:最简单的方式就是把单引号放进双引号里,这样shell不会把它当成引号边界,grep就能直接识别成目标字符。命令长这样:
grep "'" file.txt当然也有其他写法,但双引号包裹的方式最直观好记。
匹配美元符号:
$在shell里是变量前缀,在grep正则里又是行尾锚点,所以得让它“回归”成普通字符。这里要注意:用双引号写"\$"是没用的——因为shell会先把\$解析成$传给grep,此时grep会把它当成行尾标记,而不是美元符号本身。正确的做法是用单引号包裹:grep '\$' file.txt
重点:同时匹配单引号和美元符号
这里有几个实用的方法,选你顺手的来:
方法1:混合拼接单双引号
利用shell允许不同引号直接拼接的特性,把单引号放在双引号里,美元符号放在单引号里,shell会自动把它们拼成完整的匹配模式:
grep "'\$" file.txt
解释一下:"'是双引号包裹的单引号,'\$'是单引号包裹的转义美元符号,拼在一起就是'$,刚好是我们要匹配的两个字符。
方法2:双引号里双重转义美元符号
如果习惯全程用双引号,那得对美元符号做两次转义——第一次转义让shell把\\$变成\$,传给grep后,\$就会被识别成普通的美元符号:
grep "'\\$" file.txt
方法3:用ANSI-C引用(bash/zsh适用)
如果你的shell是bash或者zsh,可以用$'...'这种ANSI-C引用格式,里面可以直接用转义表示单引号,美元符号直接写就行:
grep $'\''$' file.txt
这里$'\''是表示单引号的写法,后面直接跟$,组合起来就是我们要匹配的'$,非常直观。
小技巧:先验证模式再用
不确定模式对不对的话,可以先用echo测试,比如:
echo $'\''$' # 输出就是 '$',说明模式没问题
确认后再传给grep就稳了。
内容的提问来源于stack exchange,提问作者Heitor
相关产品推荐
相关产品推荐

