如何在管道grep命令时避免将带'-'的内容识别为选项?
如何在管道grep命令时避免将带'-'的内容识别为选项?
嘿,这个问题我之前刚踩过坑!当你直接用 grep -a 时,grep 会把 -a 当成它自己的命令选项(用来处理二进制文件的那个参数),而不是你要搜索的目标字符串。下面给你几个简单靠谱的解决办法:
用双破折号
--标记选项结束
这是大多数 Unix/Linux 命令通用的技巧,--后面的内容会被命令完全当作普通参数,不会解析成选项。对你的场景来说,命令就是:hashcat --help | grep -- "-a"这样 grep 就明确知道
-a是你要找的字符串,不会乱当成自己的选项了。用引号包裹搜索字符串(配合
--更稳妥)
如果你单独用引号包裹-a,比如grep "-a",在某些情况下也能生效,但如果你的搜索字符串更复杂(比如包含多个带-的内容),还是加上--更保险。不过针对这个场景,下面的命令也能工作:hashcat --help | grep "-a"转义横杠(正则方式)
你提到了正则表达式,其实这里用基础正则就可以解决——把横杠转义,让 grep 把它当成普通字符:hashcat --help | grep '\-a'不过这种方法不如
--直观,除非你本来就在写复杂正则,否则更推荐第一种方法。
顺便说下你疑惑的正则和扩展正则:其实这个问题和正则类型关系不大,扩展正则(grep -E)主要是让你能使用更丰富的元字符(比如 |、()、+ 这些),而你现在遇到的是命令选项解析的问题,核心是告诉 grep 哪里是选项的终点。
备注:内容来源于stack exchange,提问作者Eggwind
相关产品推荐
相关产品推荐

