Grep命令被特殊字符反转?

时间:2011-10-04 10:08:19

标签: bash shell unix grep

我正在尝试编写一个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试图扩展特殊字符,但我不知道如何在字符串中转义所有字符。

有人有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:5)

尝试fgrep(或grep -F

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

答案 1 :(得分:1)

未经测试,但此可能帮助

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

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