模式匹配 0-99
Pattern matching 0-99
我有一个 find
命令可以根据我正在处理的 glob 模式查找 jar 文件。但是,它没有产生任何结果。文件名的格式如下所示: lib-core-x.x.x.jar
其中 x
可以是一位或两位数字。我需要一个 POSIX 兼容的方式来匹配最后一位数字,它可以是 0-99 之间的数字。
Code
:
find /usr/share -maxdepth 5 -path '*/lib-core-*.*.[[:digit:]].jar'
Example String
:
lib-core-2.15.20.jar
如果最后一个数字是一位数而不是两位数,则此方法有效。
最初我会说您可能想使用 -name
而不是 -path
,它与文件的基本名称相匹配(因为您已经在 -path
前加上 */
).但是鉴于您的问题与正则表达式相关(并且 -path
不执行正则表达式)并且您想要 posix 合规性,您可能需要研究:
find -regextype posix-egrep -regex .....
您正尝试在 glob 模式中使用正则表达式,但这不起作用。
您可以使用两个用 -o
分隔的 glob 模式,一个用于 1 位数字,另一个用于 2 位数字。
并且由于您只是匹配文件名部分,因此请使用 -name
而不是 -path
。
find /usr/share -maxdepth 5 \( -name 'lib-core-*.*.[0-9].jar' -o -name 'lib-core-*.*.[1-9][0-9].jar' \)
我有一个 find
命令可以根据我正在处理的 glob 模式查找 jar 文件。但是,它没有产生任何结果。文件名的格式如下所示: lib-core-x.x.x.jar
其中 x
可以是一位或两位数字。我需要一个 POSIX 兼容的方式来匹配最后一位数字,它可以是 0-99 之间的数字。
Code
:
find /usr/share -maxdepth 5 -path '*/lib-core-*.*.[[:digit:]].jar'
Example String
:
lib-core-2.15.20.jar
如果最后一个数字是一位数而不是两位数,则此方法有效。
最初我会说您可能想使用 -name
而不是 -path
,它与文件的基本名称相匹配(因为您已经在 -path
前加上 */
).但是鉴于您的问题与正则表达式相关(并且 -path
不执行正则表达式)并且您想要 posix 合规性,您可能需要研究:
find -regextype posix-egrep -regex .....
您正尝试在 glob 模式中使用正则表达式,但这不起作用。
您可以使用两个用 -o
分隔的 glob 模式,一个用于 1 位数字,另一个用于 2 位数字。
并且由于您只是匹配文件名部分,因此请使用 -name
而不是 -path
。
find /usr/share -maxdepth 5 \( -name 'lib-core-*.*.[0-9].jar' -o -name 'lib-core-*.*.[1-9][0-9].jar' \)