linux - 如何通过 shell linux 使用 grep 精确搜索文件中的字符串?

标签 linux bash shell grep

我有一个文件,文件的内容有这样一个字符串:

'/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,这将导致 grepfoo 输出行.txtdb.dat 中的任何行相匹配。

grep -f /usr/local/caotoc/db.dat -F foo.txt

关于linux - 如何通过 shell linux 使用 grep 精确搜索文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41043805/

相关文章:

linux - 如何使用 "awk"执行具有相同尾部的多个文件并导出到一些具有新尾部的新文件?

linux - 如何从字符类的范围中排除字符?

python - 在 Pythonscript 中获取 Netcat 的输出

c - LD_PRELOAD 未预加载所有符号

linux - 需要删除大量文件

Bash 脚本问题

bash - 在 Go 中启动一个定义为别名的终端命令

regex - 给定单词列表,对文本正文进行全词匹配

linux - 基于目录中现有文件创建文件的shell脚本

linux - Vagrant-Reddit 的凭据不正确和无法正常安装