Grep通配符在中间

时间:2013-08-19 05:14:53

标签: regex linux unix grep

如何将这些行与UNIX的grep匹配?

call($variable, 'tiki-index.php');
call('string123', 'tiki-index.php');
call(13, 'tiki-index.php');

我试过

user@host:~$ grep -e "smarty->assign(*, 'tiki-index.php');" .

但该命令与上述任何一项都不匹配。

3 个答案:

答案 0 :(得分:1)

使用-R使搜索递归。 如果您不希望搜索是递归的,请在*上进行搜索,而不是。

您需要将正则表达式更改为:

"call(.*, 'tiki-index.php');"

或者,聪明的:

"smarty\->assign(.*, 'tiki-index.php');"

有关详细信息,请参阅有关正则表达式的文档。

答案 1 :(得分:1)

我有以下文件

 cat x.txt 
call($variable, 'tiki-index.php');
call('string123', 'tiki-index.php');
call(13, 'tiki-index.php');
call(sdfadf..df.d.foo);
small(12, 'tiki-index.php');

我的grep返回以下内容,您可以根据需要将其设为特定或一般

grep -e "call.*\'tiki-index.php\');" x.txt 
call($variable, 'tiki-index.php');
call('string123', 'tiki-index.php');
call(13, 'tiki-index.php');

答案 2 :(得分:0)

您的模式grep -e "smarty->assign(*, 'tiki-index.php');"将符合以下条件:

smarty->assign(, 'tiki-index.php');
smarty->assign((, 'tiki-index.php');
smarty->assign(((, 'tiki-index.php');
...

(即*适用于(。)

您想要指定任何字符,即.,然后匹配*个实例。使用:

grep -e "smarty->assign(.*, 'tiki-index.php');"

代替。