假设我的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中找到的匹配
答案 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');