2012-07-27 83 views
0

有没有办法以下面的方式展开变量?在这种情况下在查找正则表达式中展开一个变量

X=$(date --date=yesterday +%Y-%m-%d) 
echo $X #--> 2012-07-26 

下面的命令工作,但即使日期是25,$X被视为无效,并挑选*。有没有专门扩展这个变量的方法?

find . -maxdepth 1 -type f -regex '.*\(/\asyncprocessor.log.'$X'*\|/Renewal.log.'$X'*\|/Scheduler.log.'$X'*\|/smsprocessor.log.'$X'*\|/Subscription.log.'$X'*\).*' -exec ls -ltr {} \; 
+0

同时要求在serverfault:http://serverfault.com/q/411797/30957 – 2012-07-27 11:56:31

回答

0

2012-07-26 *在正则表达式中意思是2012-07-2其次是6(0或更多次)。

也许你想2012-07-26 *(*:任何字符0或更多的时间)

如果$ x可以包含空格用双引号,如: “$ X”

要确切的点。必须逃脱\。否则他们匹配任何字符, 和字符不需要进行转义

2

如果您简化正则表达式,这个问题变得更清晰辨认:

'.*/Scheduler.log.'$X'*.* 

$ X后的点意味着最后一个字母可以重复零次。在它之前插入一个点。

另外,由于您使用的是maxdepth 1,所以在开始之前删除a之前的反斜杠,并且可能还需要删除.*

更新:这项工作对我来说:

find . -maxdepth 1 -type f -regex './\(asyncprocessor\|Renewal\|Scheduler\|smsprocessor\|Subscription\).log.'$X'.*' -exec ls -ltr {} \; 
+0

都能跟得上没有工作 – mannoj 2012-07-27 11:09:03

+0

@mannoj:更新了结果。 – choroba 2012-07-27 11:24:38

+0

非常感谢Choroba,它的作品在你的方法..! – mannoj 2012-07-27 11:30:50