逃避grep中的感叹号?

时间:2012-11-19 20:40:29

标签: linux bash grep

我想要从某些文件(包括引号)中获取这个完整的行(下面是awk中的rpm命令)。当我尝试grep和grep -F时,我似乎无法获得正确的输出。我试着从grep语句中删除部分尾行,看起来像是“!”造成问题。我尝试用单引号包装字符串,也没有运气。谢谢。

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

2 个答案:

答案 0 :(得分:8)

  1. 使用单引号 - 当您需要文字单引号时,只需删除单引号,将其放入反斜杠,然后返回:

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

  2. 使用双引号和反斜杠转义不仅是感叹号,还有其他一些本来会被shell取代的东西:

    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

  5. 我会使用POSIX字符串,或者简单的单引号选项 - 它具有在其他shell中工作的有争议的优势,例如dash

答案 1 :(得分:-1)

反斜杠应该可以解决问题

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