tìm lệnh với bộ định lượng regex, ví dụ {1,2}


13

Tôi đã cố gắng tạo một chuỗi lệnh find sẽ tìm tất cả các tệp kết thúc bằng số 1-99 nhưng loại trừ tất cả các tệp khác.

ví dụ: tôi muốn tìm myfile1 myfile99 nhưng không phải myfile456 và không phải myfilBackup

Regex tôi nghĩ là myfile[1-9]{1,2}nhưng tôi không thể làm việc này với tìm kiếm.

find . -regex '.*myfile[0-9]{1,2}' HOẶC LÀ find . -iname 'myfile[0-9]{1,2}'

Từ những gì tôi có thể thấy đó là {1,2}phần không hoạt động.

(bằng cách này bạn có thể sử dụng -name -regexthay thế cho nhau?)

Bất kỳ trợ giúp đánh giá cao.


1
-iname(và -name) sử dụng những đống , mà không có cú pháp này.
l0b0

Câu trả lời:


10

Bạn có thể thử

find . -regex '.*myfile[0-9][0-9]?'

hoặc là

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)

Cảm ơn - dòng đầu tiên đang làm việc cho tôi. Tôi đã thử điều này với -iname nhưng tôi không nghĩ nó hỗ trợ cú pháp nếu không tôi đang làm gì đó sai.
Lukas88

17

Nếu bạn có GNU find, bạn có thể sử dụng một loại biểu thức chính quy khác:

find . -regextype sed -regex '.*myfile[0-9]\{1,2\}'

Theo GNU findsử dụng một thiến Emacs cú pháp biểu thức chính quy theo mặc định - Emacs hỗ trợ \{from,to\}cú pháp, nhưng ít nhất GNU findkhông hỗ trợ nó.

Thật kỳ lạ, hướng dẫn tham khảo không bao gồm một phần về sedcú pháp biểu thức chính quy, vì vậy ai biết phần nào của nó được hỗ trợ.


1
sednhư edcó vẻ là một bí danh cho posix-basic, vì vậy phải phù hợp với POSIX BRE (mặc dù hỗ trợ một số phần mở rộng như \+). Nó không tương thích với GNU sed, ví dụ, [\n]phù hợp với một dòng mới thay vì dấu gạch chéo ngược hoặc ntheo yêu cầu của POSIX. Xem thêm -regextype posix-extendedđể biết POSIX ERE (vì vậy .*myfile[0-9]{1,2}), cũng với các tiện ích mở rộng như \shoặc\<
Stéphane Chazelas

Tôi chưa bao giờ biết về -regextype. Có vẻ như nếu bạn sử dụng -regextype egrepcó vẻ như bạn có thể tránh được dấu gạch chéo ngược.
Sridhar Sarnobat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.