如何用“ - ”符号

时间:2016-04-10 09:23:41

标签: linux shell grep

运行以下grep命令时,我得到奇怪的结果,首先是" 1.txt"的内容。是这样的:

401 f
-- -----

然后,当使用cat 1.txt | grep -v -- --时,结果为401 f,命令为cat 1.txt | grep -v -- -,结果也为401 f。我知道第一个字段中的--是grep的过滤模式,所以我认为第二个字段中的---都可以表示标准输出,对吧?然后我运行cat 1.txt | grep -v --,这里我省略了stdout,但这是错误的,信息是Try 'grep --help' for more information。虽然我也运行cat 1.txt | grep -v -,但这样做的结果是401 f

要进一步了解grep中---之间的差异,我会运行cat 1.txt | grep --,它会显示Try 'grep --help' for more informationcat 1.txt | grep -获得结果-- -----

顺便说一下,我试过了

  1. cat 1.txt | grep -v '--' --
  2. cat 1.txt | grep -v '--' -
  3. cat 1.txt | grep -v '--'
  4. cat 1.txt | grep -v '-'
  5. cat 1.txt | grep '--'
  6. cat 1.txt | grep '-'
  7. 最后,我得到了相同的结果。

    我的问题可能是

    1. 第二个字段中---之间的区别是什么?

    2. 为什么我不能使用--模式在行中获取-- -----

2 个答案:

答案 0 :(得分:2)

使用getopt的实用程序中的

--用于表示选项的结束。

来自manual

  

特殊论点" - "无论扫描模式如何,强制选项扫描结束。

因此在实践中,您的第一个--参数将被忽略。如果您想要-- grep,则需要grep .... -- --

答案 1 :(得分:2)

你得到你得到的,因为你使用“-v”,这意味着“显示任何不匹配的东西”。

关于 - 又名。双破折号:

double-dash是底层getopt库的信号,它处理命令行选项的解析,双击之后的所有内容都必须被视为文字字符串而不是参数,而不管前导的破折号。 例如

  • 'grep -v test'将查找stdin上与'test'不匹配的所有行。
  • 'grep - -v test'将在文件测试
  • 中查找与“-v”匹配的所有行

你的grep基本上是在寻找的任何东西而不是“ - ”