テキストのgrepと角括弧

テキストのgrepと角括弧

ダウンロードしたファイルを次のようにログに保存します。

[source] filename

ファイルを何度もダウンロードしたくない場合は、次のようにします[source] filename

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-strings括弧が正規表現のメタ文字として解釈されないようにスイッチを使用する必要があります。

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

-q --quietその後、スイッチも使用する必要があるため、最初の項目が表示さgrepれたら終了します。これは単に速度上の理由によるものです。

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

おすすめ記事