当正则表达式存储在shellscript变量中时,grep正则表达式不返回结果

时间:2017-07-25 10:18:46

标签: regex bash shell unix grep

假设我的Helloworld.txt包含

function( '100');

现在我想在'100'之后搜索(之间可能存在空格的任何事件。现在,使用此UNIX命令:

案例-I:

grep "[(][ ]*'100'" Helloworld.txt

我在Helloworld.txt中找到了正确的匹配。

但是当我写一个简单的shellcript时:

案例-II:

Key="100"
Key="\"[(][ ]*'$Key'\"" 
echo $Key
grep $Key Helloworld.txt

正确打印:"[(][ ]*'100'"

但是,它没有返回Helloworld.txt中找到的匹配

1 个答案:

答案 0 :(得分:3)

我认为你过分复杂了。您的原始命令可以这样写:

grep "( *'100'" Helloworld.txt

如果您希望数字100来自变量,请使用:

grep "( *'$key'" Helloworld.txt

如果要将整个正则表达式存储在变量中,那么它将是:

regex="( *'$key'"
grep "$regex" Helloworld.txt

请注意,句法引号(如字符串文字或变量周围的引号)不能与字符串内的引号互换。我的意思是,以下两件事情不等同

regex="( *'$key'" # good
grep "$regex"

regex="\"( *'$key'\"" # bad
grep $regex

下面的测试显示了所有可行的选项:

$ cat file
function( '100');
$ grep "( *'100'" file
function( '100');
$ key=100
$ grep "( *'$key'" file
function( '100');
$ regex="( *'$key'"
$ grep "$regex" file
function( '100');