我有一个文件,文件的内容有这样一个字符串:
'/ad/e','@'.base64_decode("ZXZhbA==").'($zad)', 'add'
我想检查文件是否有这个字符串。但是当我用grep查看的时候,总是返回false。我尝试了一些方法:
grep "'/ad/e','@'.base64_decode("ZXZhbA==").'($zad)', 'add'" foo.txt
grep "'/ad/e','@'\.base64_decode\("ZXZhbA\=\="\)\.'\(\$zad\)', 'add'" foo.txt
str="'/ad/e','@'\.base64_decode\("ZXZhbA\=\="\)\.'\(\$zad\)', 'add'"
grep "$str" foo.txt
你能帮帮我吗?也许,另一个命令行。
这是我的情况:
while read str; do
if [ ! -z "$str" ]; then
if grep -Fxq "$str" "$file_path"; then
do somthing
fi
fi
done < <(cat /usr/local/caotoc/db.dat)
非常感谢!
最佳答案
首先,您需要确保字符串被正确引用。这是一种艺术形式,因为您的字符串同时包含单引号和双引号。
一种想法是使用 read
和 here-document 来避免必须转义任何内容。
其次,您需要使用 -F
来执行精确的字符串匹配,而不是更一般的正则表达式匹配。
IFS= read -r str <<'EOF'
'/ad/e','@'.base64_decode("ZXZhbA==").'($zad)', 'add'
EOF
grep -F "$str" foo.txt
基于更新,您可以使用一个简单的循环一次读取它们。
while IFS= read -r str; do
grep -F "$str" foo.txt
done < /usr/local/caotoc/db.dat
您可以简单地使用 -f
选项到 grep
,这将导致 grep
从 foo 输出行.txt
与 db.dat
中的任何行相匹配。
grep -f /usr/local/caotoc/db.dat -F foo.txt
关于linux - 如何通过 shell linux 使用 grep 精确搜索文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41043805/