【问题标题】:Grep command being reversed by special character?Grep命令被特殊字符反转?
【发布时间】:2011-10-04 10:08:19
【问题描述】:

我正在尝试编写一个 bash 脚本,该脚本将在一个 txt 文件中搜索存储在变量中的另一个 txt 文件中的字符串。但是,该字符串中包含许多特殊字符,并且由于某种原因,它似乎正在破坏 grep 命令。 字符串如下: Sometxt ^/someurl/?$ http://somewebsite.com/

我使用的 grep 命令是

grep -v "$string" file.txt >> new_file.txt

这似乎不起作用,如果我使用以下命令回显实际的 grep 命令:

echo "grep -v \"$string\" file.txt >> new_file.txt"

我得到一个混乱的输出。

如果我输入 grep 命令手册并输入实际字符串,它工作正常,所以我假设我的 shell 正在尝试扩展特殊字符,但我不知道如何在字符串中转义所有这些字符。

有人有什么想法吗?

谢谢。

【问题讨论】:

  • echo 是找出“真正正在执行的内容”的糟糕方法 - 为此使用 set -x

标签: bash shell unix grep


【解决方案1】:

试试 fgrep(或grep -F

默认情况下,grep 将搜索模式解释为基本正则表达式,为 .$^[] 等字符赋予特殊含义

【讨论】:

    【解决方案2】:

    未经测试,但这可能有帮助

    grep -v "$(printf "%q" "$string")" file.txt >> new_file.txt
    

    bash 内置 printf %q 格式化程序转义 shell 特殊字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2019-11-04
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多