linux find regex

前端 未结 4 578
[愿得一人]
[愿得一人] 2021-01-30 03:49

I\'m having trouble using the regex of the find command. Probably something I don\'t understand about escaping on the command line.

Why are these not the sa

相关标签:
4条回答
  • 2021-01-30 04:13

    You should have a look on the -regextype argument of find, see manpage:

          -regextype type
              Changes the regular expression syntax understood by -regex and -iregex 
              tests which occur later on the command line.  Currently-implemented  
              types  are  emacs (this is the default), posix-awk, posix-basic, 
              posix-egrep and posix-extended. 
    

    I guess the emacs type doesn't support the [[:digit:]] construct. I tried it with posix-extended and it worked as expected:

    find -regextype posix-extended -regex '.*[1234567890]'
    find -regextype posix-extended -regex '.*[[:digit:]]'
    
    0 讨论(0)
  • 2021-01-30 04:20

    Well, you may try this '.*[0-9]'

    0 讨论(0)
  • 2021-01-30 04:23

    Regular expressions with character classes (e.g. [[:digit:]]) are not supported in the default regular expression syntax used by find. You need to specify a different regex type such as posix-extended in order to use them.

    Take a look at GNU Find's Regular Expression documentation which shows you all the regex types and what they support.

    0 讨论(0)
  • 2021-01-30 04:35

    Note that -regex depends on whole path.

     -regex pattern
                  File name matches regular expression pattern.  
                  This is a match on the whole path, not a search.
    

    You don't actually have to use -regex for what you are doing.

    find . -iname "*[0-9]"
    
    0 讨论(0)
提交回复
热议问题