首页 > 解决方案 > 在 bash 中使用正则表达式列出文件 | 忽略具有某些字符的文件

问题描述

我是正则表达式的新手,我想列出与给定正则表达式匹配的文件。我有一些示例文件,如下图所示

在此处输入图像描述

我想要正则表达式,它应该返回下面提到的文件:

test1.csv test2.csv test3.csv test9.csv.tt

我想为此使用 find 命令,我也尝试使用下面提到的 find 命令,但无法达到我的预期结果

find . -maxdepth 1 -type f -name "**test[0-9]*[^-a-zA-Z_]***.csv*" -exec ls -l {} +

我想使用相同的命令来实现我的预期输出,只有我想要正确的正则表达式。

任何人有任何想法请帮忙!

标签: regexbash

解决方案


使用find,您可以尝试:

find . -type f -regex ./test[0-9]\*.csv.\* -exec ls -l {} +

或者,使用sed,您可以尝试

$ ls -l | sed '/^d/d;/ test[0-9]*\.csv.*/!d'

(不确定数字是否是强制性的——如果是,则替换*+

这里面有 2 个命令sed

  1. /^d/d删除以 a 开头的任何行d(排除目录)
  2. / test[0-9]*\.csv.*/!d删除任何与您要过滤的正则表达式不匹配的行。

推荐阅读