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

对于 grep,您可以使用-F固定字符串而不是正则表达式。对于 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

相关内容