开发者

repetition in GNU find regexp

开发者 https://www.devze.com 2023-04-01 13:44 出处:网络
I am trying to find all the files whose name contains exactly 14 digits (I\'m trying to match a timestamp in the filename). I\'m not sure how to get the GNU find regexp syntax for repetitions right.开

I am trying to find all the files whose name contains exactly 14 digits (I'm trying to match a timestamp in the filename). I'm not sure how to get the GNU find regexp syntax for repetitions right.开发者_高级运维

I've tried find -regex ".*[0-9]{14} and find -regex ".*[0-9]\{14\}, neither of these turns up any results. Can you help me with the syntax?


remember, GNU find's -regex matches a whole path. Anyway, you can use a combination of find and grep to do the task, eg to find exactly 14 digits with no other characters

find . -type f -printf "%f\n" | grep -E "\b[0-9]{14}\b"

modify to suit your needs


Try changing the -regextype parameter to find.

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.


Strange, I just gave it a try and I could not get this work. Here's a workaround anyway (matching 2 consecutive numbers):

$ls
a123.txt  a1b2c3.txt  a45.txt  b123.txt
$find -regex '.*[^0-9][0-9][0-9][^0-9].*'
./a45.txt
0

精彩评论

暂无评论...
验证码 换一张
取 消