正则表达式使用文件名 shell 脚本过滤文件

标签 regex linux bash shell sftp

尝试根据文件名约定过滤文件

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/

相关文章:

regex - 使用 perl 拆分可能包含空格的行

linux - Boost::Python:在构建 python 扩展时将自定义参数传递给 gcc

linux - 从 Linux 中删除 .deleted 条目

linux - systemd 中的守护进程服务

linux - 我正在尝试使用子进程模块来运行由 html 文件组成的终端命令

regex - Perl - 使用正则表达式分割包含元组的字符串

python - 传递两个参数以替换 Re.sub 的函数

bash - 如何在 IF 片段中设置默认值?

regex - 如何正确设置正则表达式以用 perl 替换多行变量占位符

linux - 在 Bash 中用 bc 舍入数字