基于文件名的 Linux 文件系统正则表达式搜索

标签 regex linux grep find regex-negation

我已尝试执行以下命令 find 。 | egrep -v '.*/[A-Z]{3}-[0-9]{8}-.' 递归搜索不在模式中的文件(不是文件夹)。这也显示文件夹!我错过了什么?

最佳答案

您可以直接使用 find-not 选项:

find . -type f -regextype posix-egrep -not -regex '.*/[A-Z]{3}-[0-9]{8}-[^/]*$' -exec basename {} \;

通过 GNU find,您可以使用

find . -type f -regextype posix-egrep -not -regex '.*/[A-Z]{3}-[0-9]{8}-[^/]*$' -printf "%f\n"

详细信息:

  • -type f - 仅返回文件路径
  • -regextype posix-egrep 将正则表达式风格设置为 POSIX ERE
  • -not 反转正则表达式结果
  • .*/[A-Z]{3}-[0-9]{8}-[^/]*$ - 匹配文件名以三个大写字母开头的路径, -、八位数字、-,然后可以包含除 / 之外的任何文本,直到字符串末尾
  • -exec basename {}\;/ -printf "%f\n" 仅打印不带文件夹的文件名(参见 Have Find print just the filenames, not full paths )

关于基于文件名的 Linux 文件系统正则表达式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71525975/

相关文章:

c++ - 无法为非 root 用户加载 libsctp.so

linux - 在不使用 grep -w 的情况下在 QNX 中查找完全匹配项

regex - PCRE正则表达式排除特定字符?

regex - 为什么此正则表达式不返回任何匹配项?

linux - 如何从不同的起点向 csv 文件的多行添加特定值?

colors - 按文本颜色查找

perl - 在单次迭代中提取同一模式第一次出现和最后一次出现之间的所有内容

linux - 用于搜索在我的 ubuntu 上不起作用的字符串的简单 grep 命令

除撇号外的所有非字母数字的java字符串拆分

c# - 正则表达式以空格分隔,除非在引号中