正则表达式捕获具有特定结构的文件夹名称

正则表达式捕获具有特定结构的文件夹名称

使用此结构捕获文件夹名称的正则表达式是什么

xxxx-x(x - 整数)

 ls /usr/hdp | .....
 2.6.0.3-8  current HG_MASTER 2.4.3 34.1 45-995

预期产出

2.6.0.3-8



ls -lh /usr/hdp/
total 8.0K
drwxr-xr-x. 27 root root 4.0K Jan  1 15:24 2.6.0.3-8

答案1

自从你标记了,您实际上可以使用扩展的 globs 通过 shell 的文件名匹配来做到这一点:

$ shopt -s extglob
$ touch /some/path/{2.6.0.3-8,22.66.0.333-8,foobar}
$ printf "%s\n" /some/path/+([0-9]).+([0-9]).+([0-9]).+([0-9])-+([0-9])
/some/path/22.66.0.333-8
/some/path/2.6.0.3-8

那里的模式的工作方式类似于更常见的东西,例如**.png,因此您可以将固定部分(例如路径)粘贴到其中。添加尾部斜杠/以仅匹配目录。 (不过,斜杠也出现在输出中。)

在 ERE 正则表达式中,模式与 相同[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+。模糊版本只会检查允许的字符,例如+([-.0-9])(或[-.0-9]+ERE 中的),但当然也会匹配例如123..456

如果您只想打印文件名,find可能会更容易,但如果您想对它们运行命令,那么 shell 循环也是一个选项(与 一起find -exec)。

答案2

find . -type d -regextype posix-egrep -regex '^./([0-9]+[.]){3}[0-9]+[-][0-9]+'

使用 find 然后使用 regextype 标志将 reg 表达式语法设置为egrep。使用 -regex 检查 3 个数字和一个“点”,然后检查一个数字、“破折号”和一个数字。

如果数字超过一个字符,则每个数字后需要加 +。

答案3

你需要用它find来代替。对于精确匹配使用模式:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-[0-9]*"

如果您需要任何仅包含以下内容的文件数字.并且-名称中的符号尝试:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[.0-9-]*"

答案4

ls /usr/hdp | egrep '[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+'

相关内容