grep 和文本中的括号

grep 和文本中的括号

我将下载的文件存储在日志中,如下所示:

[source] filename

为了避免多次下载文件,我[source] filename之前 grep for :

if ! grep "$signature" downloaded.log > /dev/null; then
    wget ...
fi

用 grep 开始我的行[不能按我需要的方式工作:

signature="[source] filename"
echo $signature | grep "$signature"
echo $signature | grep "\$signature" #trying to escape first bracket

两者都没有返回任何内容。

有什么聪明的解决方法吗?

如果不需要更改代码,切换到括号()、大括号{}或其他内容,那就太好了<>

答案1

首先,您必须引用变量,然后您应该使用-F --fixed-stringsswitch 来避免将括号解释为正则表达式元字符:

echo "$signature" | grep -F "$signature"

那么你也应该使用-q --quietswitch,所以grep一旦发现第一次出现就退出。这仅出于速度考虑:

if ! grep -Fq "$signature" downloaded.log; then
    wget ...
fi

相关内容