我正在尝试编写一个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试图扩展特殊字符,但我不知道如何在字符串中转义所有字符。
有人有什么想法吗?
感谢。
答案 0 :(得分:5)
尝试fgrep(或grep -F
)
默认情况下,grep将搜索模式解释为基本正则表达式,为.
,$
,^
[]
等字符赋予特殊含义
答案 1 :(得分:1)
未经测试,但此可能帮助
grep -v "$(printf "%q" "$string")" file.txt >> new_file.txt
bash builtin printf %q
格式化程序会转义 shell 特殊字符。