我怎么能grep一个string开头的破折号/连字符?

我想grep的string开头的连字符/连字符,如-X ,在文件中,但它是混淆这作为命令行参数。

我试过了:

 grep "-X" grep \-X grep '-X' 

使用:

grep -- -X

相关: 一个裸双破折号是什么意思? (感谢关于natty的坚果 )。

破折号字符是Bash中的特殊字符,如http://tldp.org/LDP/abs/html/special-chars.html#DASHREF所述; 。 所以逃避这一次只是让你过去Bash,但Grep仍然有破折号的自己的意思(通过提供选项)。

所以你真的需要逃避两次(如果你不想使用其他提到的答案)。 以下将/应该工作

 grep \\-X grep '\-X' grep "\-X" 

尝试Bash如何将parameter passing给脚本/程序的一种方法是创build一个只反映所有参数的.sh脚本。 我使用了一个名为echo-args.sh的脚本,它不时地播放,它包含的内容是:

 echo $* 

我把它作为:

 bash echo-args.sh \-X bash echo-args.sh \\-X bash echo-args.sh "\-X" 

你明白了。

grep -e -X将会诀窍。

 grep -- -X grep -- "-X" grep \\-X grep "\-X" grep -e -X grep [-]X 

我没有访问Solaris机器,但grep "\-X"在Linux上适用于我。

如上所述,正确的方法是使用“ – ”来停止处理参数。 这是由于在工具的源代码中使用了getopt_long(来自getopt.h的GNU C函数)。

这就是为什么你注意到其他命令行工具上的相同现象; 因为他们大多数是GNU工具,并且使用这个调用,他们performance出相同的行为。

作为一个方面说明 – getopt_long是什么给了我们在-rlo和–really_long_option之间的冷静select,以及在解释器中的参数组合。

你可以使用nawk

 $ nawk '/-X/{print}' file 

如果您正在使用另一个将单个parameter passing给grep的实用程序,则可以使用:

 '[-]X' 
 ls -l | grep "^-" 

希望这个能够达到你的目的。

grep“^ -X”文件

它会grep并从文件中挑选所有的行。 ^在grep中,“^”表示一行以