尝试根据文件名约定过滤文件
eg: Standard_<number>_<15digitnumber>.xml
我能够使用下面的命令来获取符合上述条件的文件,但它还在中间包含 varchar。
ls Standard_[0-9]*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
输出:
标准_2149190256_151116162725717.xml
标准_2149190257_151116162725717.xml
标准_2149ABCDE_151116162725717.xml
在上面突出显示的输出中,它返回字符串,因为我在中间的数字后面有 *。我尝试在 [0-9] 前后放置 + 以仅包含数字,但该命令不起作用。
ls Standard_[0-9]+_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
输出:不能 ls: "/somefolder/Standard_[0-9]+_[0-9][0-9][0-9][0-9][ 0-9][0-9][0-9][0-9][0-9][0-9][0-9]”未找到
ls Standard_+[0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
输出:不能 ls: "/somefolder/Standard_+[0-9]_[0-9][0-9][0-9][0-9][ 0-9][0-9][0-9][0-9][0-9][0-9][0-9]”未找到
感谢您的帮助。
最佳答案
Bash 的 extended globbing可以在这里帮助你:
$ printf "%s\n" Standard*
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
Standard_2149ABCDE_151116162725717.xml
$ shopt -s extglob nullglob
$ printf "%s\n" Standard_+([0-9])_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
此处,+([0-9])
匹配一个或多个数字的序列,我们排除文件“Standard_2149ABCDE_151116162725717.xml”。
关于正则表达式使用文件名 shell 脚本过滤文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46917049/