bash:文字列変数にアスタリスクが含まれています。この変数を使用してgrep、sedなどで検索するにはどうすればよいですか?

bash:文字列変数にアスタリスクが含まれています。この変数を使用してgrep、sedなどで検索するにはどうすればよいですか?

良い一日をお過ごしください。テキストファイル(zz.txt)があります。

Chemical name
3-Aminopropane-1-sulphonic acid
Synonym(s)
--
Homotaurine * Tramiprosate
--
Chemical name
Common name and synonyms
...

変数s = "Homotourine * Tramiprosate"があります。テキストファイルでこの変数のテキストを選択(選択解除)しようとしています。

s="Homotaurine * Tramiprosate"; cat zz.txt | grep -i "$s"
s="Homotaurine * Tramiprosate";cat zz.txt | sed -ne "/$s/p"

動作しません。しかし、$ sを「化学物質名」に変更すると、すべてがうまく機能し、grepとsedも正確で同様に機能します。別のテキストファイルから変数$ sを受け取ります。以下にアスタリスクを含めることも含まない場合もあります。はい、アスタリスクは非常に特別な文字であることを知っています。 sed / grepを使用してタスクをどのように解決できますか?もう一つの質問 - どのような似たようなキャラクターが面倒なことになるのでしょうか?

答え1

-Fgrepの場合、正規表現の代わりに固定文字列を使用できます。 sedの場合、状況ははるかに複雑です。 Perlに切り替えると役に立ちます\Q/参照要素機能。

#!/bin/bash
s="Homotaurine * Tramiprosate"; grep -Fi -- "$s" zz.txt
s="Homotaurine * Tramiprosate"; s=$s perl -ne 'print if /\Q$ENV{s}/' -- zz.txt

関連情報