2012-11-19 57 views
3

我有我想从某些文件,其中包括引号用grep出这个全系列(rpm命令到下面AWK)。当我尝试grep和grep -F时,我似乎无法获得正确的输出。我试图从grep语句中删除部分尾行,它看起来像“!”造成问题。我试图用单引号包装字符串,也没有运气。谢谢。在grep中转义感叹号?

rpm -qVa | awk '$2!="c" {print $0}' 
+0

完整添加grep行示例可能会有帮助。我想它是这样的:'grep'rpm -qVa | awk'$ 2!=“c”{print $ 0}“' – bonsaiviking

+0

如果您正在收到”event not found“,请关闭Bash中的'histexpand'选项。但是,IIRC单引号应该防止这种情况发生。 – tripleee

回答

-1

反斜杠应该做的伎俩

rpm -qVa | awk '\$2!="c" {print $0}' 
+1

不幸的是,这是行不通的。 –

7
  1. 使用单引号 - 当你需要一个单引号,只是下降了单引号,把一个在同一个反斜杠,和然后回去:

    grep 'rpm -qVa | awk '\''$2!="c" {print $0}'\' filename

  2. 使用双现状TES不仅反斜杠逃脱感叹号,但一切否则将得到由壳代替:

    grep "rpm -qVa | awk '\$2\!=\"c\" {print \$0}'" filename

  3. 使用POSIX字符串:

    grep $'rpm -qVA | awk \'$2!="c" {print $0}\'' filename

  4. 使用较少特定模式:

    grep 'rpm -qvA | awk .$2.="c" {print $0}.' filename

    或者,如果你有$2=="c"检查以及$2!="c",你可以做这样的事情:

    grep 'rpm -qvA | awk .$2[^=]="c" {print $0}.' filename

我会去的POSIX串,或者也许是普通单引号选项 - 这在其他炮弹中有着可争议的优势,如dash