双引号查询下的grep -v

时间:2014-12-02 08:55:45

标签: grep double-quotes quoting

我们有一部分代码陈述,

"diff file1 file2 | /usr/bin/grep -v "#" |  /usr/bin/grep ^\>  |  /usr/bin/awk '{print $3}' | /usr/bin/xargs mkdir"

整个语句用双引号括起来(是应用程序语法的要求)。当应用程序到达此阶段时,它会给出grep错误。 此语句在命令行上运行良好。但是通过应用程序,为grep提供了错误。

  

用法:grep [OPTION] ... PATTERN [FILE] ...

     

试试`grep --help'了解更多信息。

所以不确定它是第一个grep还是第二个grep这是一个问题。

2 个答案:

答案 0 :(得分:0)

似乎是双引号的问题。尝试将您的第一个grep更改为/usr/bin/grep -v '#',将第二个grep更改为/usr/bin/grep '^>'

答案 1 :(得分:0)

您使用的是grep -v ^>>表示“重定向”。

例如,如果您这样做:

grep ^>output

所有输出都将存储在文件output中。

所以你需要做的是引用^>,以便它被解释为你正在寻找的模式:

"diff file1 file2 | /usr/bin/grep -v "#" | /usr/bin/grep "^>" | /usr/bin/awk '{print $3}' | /usr/bin/xargs mkdir"
                                                         ^  ^

顺便说一句,请注意所有grep都可以这样缩小:

diff file1 file2 | awk '/#/ || /^>/ {print $3}' | /usr/bin/xargs mkdir
                        ^^^ ^^ ^^^^
          either contains #  |   |
                             or starts with >