gpt4 book ai didi

regex - 递归查找正好 8 个十六进制字符的文件名,但不是全部 0-9,没有前瞻(Mac 终端,bash)

转载 作者:行者123 更新时间:2023-12-04 10:56:26 25 4
gpt4 key购买 nike

我正在尝试使用 find 命令编写一个正则表达式来使用 Mac 终端递归查找文件(bash,而不是 zsh,即使 Catalina 希望我出于任何原因切换)。我正在寻找以下文件:

  • 正好 8 个十六进制数字(0-9 和 A-F)
  • 但不仅是十进制数字 (0-9)

  • 换句话说,它将匹配 A1234567、ABC12DEF、12345ABC 和 ABCDABCD,但不匹配 12345678 或 09876543。

    要查找正好是 8 个十六进制数字的文件,我使用了这个:
    find -E . -type f -regex '.*/[A-F0-9]{8}'

    .*/是必要的,以允许完整路径名位于文件名之前。这最终会被馈送到 rm ,所以我必须保留路径。

    看起来像这样应该可以满足我的两个要求:
    find -E . -type f -regex '.*/(?![0-9]{8})[A-F0-9]{8}'

    但这会返回错误:
    find: -regex: .*/(?![0-9]{8})[A-F0-9]{8}: repetition-operator operand invalid

    find 命令似乎不支持前瞻。没有一个我怎么能做到这一点?

    最佳答案

    与任何 POSIX 兼容 find

    find . -type f                 \
    -name '????????' \
    ! -name '*[![:xdigit:]]*' \
    -name '*[![:digit:]]*'

    如果你坚持为此使用正则表达式,那么你去
    find -E . -type f                     \
    -regex '.*/[[:xdigit:]]{8}' \
    ! -regex '.*/[[:digit:]]*'

    那些使用 GNU find 的应该下落 -E并插入 -regextype posix-extended在使这项工作的路径之后。

    关于regex - 递归查找正好 8 个十六进制字符的文件名,但不是全部 0-9,没有前瞻(Mac 终端,bash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59147095/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com