当寻找三个期望值之一时,egrep的行为不符合预期

时间:2016-05-13 13:10:27

标签: regex grep

我正在编写一个应该自动删除名称满足一些先决条件的目录的函数。其中一个先决条件是,即使满足条件,也不会删除具有今天,昨天或前天的日期戳的目录。为此,我使用今天,昨天和前一天的日期戳填充三个变量,并计划将它们与“egrep -v”一起使用,以将它们从我将要删除它的for循环中排除。

我用作测试目录的目录包含以下文件:

  • FFFA72U_20160513
  • FFFF11F_20160404
  • FFFF12F
  • FFFF13F
  • FFFF17F
  • FFFF21F_20130230
  • FFFF99F_20160511

我尝试了很多不同的组合,但我似乎无法让egrep部分正确。我的代码目前看起来像这样:

currentDate=`date +%Y%m%d`
yesterday=`date --date yesterday +%Y%m%d`
bYesterday=`date --date="2 days ago" +%Y%m%d`

for i in `ls ./*targetdir* | egrep -i "^[A-Z]{4}[0-9]{2}[A-Z]_[0-9]{8}$" | egrep -iv "(${currenDate}|${yesterday}|${bYesterday})$"`
do
*actions here*
done

当执行上述操作时,我希望它返回具有20160404和20130230日期戳的两个文件,但我没有得到任何匹配。

删除egrep字符串周围的双引号会给我一个错误(是意外的,所以没有帮助。用单引号替换双引号也不会产生输出。

当我在两个括号前面加上/或\时,它会返回带有日期戳的所有四个目录,而我希望它排除那些带有2016年5月日期戳的目录。

我已经尝试了很多小的调整(例如,逃避管道),我无法在这里完全回忆/重复,但它归结为这样一个事实,即我不知道为什么它没有产生所需的输出

此时我对这一切都有点惊讶,我真的很感激任何指针,因为即使经过我所有的尝试并阅读有关此问题的几个主题,我也没有真正看到一个简单的方法来获取脚本做我想做的事。

1 个答案:

答案 0 :(得分:0)

错字:currenDate而不是currentDate。空替代匹配所有记录,反向匹配无。