搜索所有名字中包含两个子字符串之一的目录的Regex。

问题描述 投票:0回答:1

其实我正在做一个 Bash脚本 搜索要删除的备份目录。

我有一个目录 ~/test/ 包含一些 "备份 "目录,命名如下。

20200302_000001-daily
20200330_000001-monthly
20200528_000001-weekly
20200529_000001-daily
20200530_000001-daily
20200531_000001-monthly
20200601_000001-daily
20200602_000001-daily

有一个 find 命令,我想 记录所有包含字符串的目录名称。dailyweekly 在一个数组中:

BACKUPS=(`find $BACKUP_DIR -maxdepth 1 -regex ".*[daily|weekly]$"`) / 其中 $BACKUP_DIR 是 "test "目录的绝对路径。

问题是,这个regex匹配所有的备份目录,经过几个小时的研究,我没有找到原因。

有意思的是,如果我使用regex .*daily$匹配所有的 "每日 "备份目录(和 "每天 "备份目录)。.*weekly$ 匹配所有的 "每周 "备份目录)。)

我知道还有其他的方法,但我真的很想用regex成功。

regex bash command
1个回答
1
投票

你可以使用一个能够匹配整个输入的regex,并且包含一个分组结构而不是一个括号表达式。

BACKUPS=(`find $BACKUP_DIR -maxdepth 1 -regex ".*/.*\(daily\|weekly\)$"`)

这里,POSIX BRE模式意味着:

  • .*/ - 匹配任何0或更多的字符,直到最后一个字符。/
  • .* - 任何0或更多的字符,直到
  • \(daily\|weekly\) - 要么 dailyweekly 字序 (注意 [day|week] 同为 [adekwy|] 因为它是一个括号表达式)
  • $ - 字符串的末端。
© www.soinside.com 2019 - 2024. All rights reserved.