我想grep以破折号/连字符开头的字符串,如-X,在文件中,但它混淆了这作为命令行参数。
-X
我试过了:
grep "-X" grep \-X grep '-X'
grep -e -X将做到这一点。
grep -e -X
使用:
grep -- -X
文档 .
相关:双破折号是什么意思?< / >(感谢关于纳蒂的疯狂)。
我没有Solaris机器,但是grep "\-X"在linux上为我工作。
grep "\-X"
你可以用nawk
$ nawk '/-X/{print}' file
破折号是Bash中的一个特殊字符,如http://tldp.org/LDP/abs/html/special-chars.html#DASHREF所示。因此,转义一次只是让您跳过Bash,但Grep仍然有它自己的破折号的含义(通过提供选项)。
所以你真的需要转义它两次(如果你不喜欢使用其他提到的答案)。下面的方法会/应该会起作用
grep \\-X grep '\-X' grep "\-X"
尝试Bash如何将参数传递给脚本/程序的一种方法是创建一个.sh脚本,该脚本只回显所有参数。我使用一个名为echo-args.sh的脚本来不时地玩,它所包含的是:
echo $*
我援引它为:
bash echo-args.sh \-X bash echo-args.sh \\-X bash echo-args.sh "\-X"
你懂的。
正确的方法是使用“——”来停止处理参数,如前所述。这是由于在该工具的源代码中使用了getopt_long(来自getop .h的GNU c函数)。
这就是为什么您会在其他命令行工具上注意到同样的现象;因为它们中的大多数都是GNU工具,并且使用这个调用,所以它们表现出相同的行为。
顺便说一句,getopt_long是让我们在-rlo和——really_long_option和解释器中的参数组合之间进行酷炫选择的东西。
如果您正在使用另一个实用程序,它将单个参数传递给grep,您可以使用:
'[-]X'
grep -- -X grep \\-X grep '\-X' grep "\-X" grep -e -X grep [-]X
ls -l | grep "^-"
希望这个对你有用。
grep "^-X"文件
我的情况:
systemctl --help | grep -w -- --user
-w将匹配整个单词。 --表示命令参数的结束(将-w标记为不属于grep命令)
-w
--
grep