temukan perintah dengan regex quantifier misalnya {1,2}

13

Saya telah mencoba membuat string perintah find yang akan menemukan semua file yang diakhiri dengan angka 1-99 tetapi mengecualikan semua yang lain.

misalnya saya ingin menemukan myfile1 myfile99 tetapi tidak myfile456 dan bukan myfilebackup

Regex yang saya pikirkan adalah myfile[1-9]{1,2}tetapi saya tidak bisa menjalankannya dengan find.

find . -regex '.*myfile[0-9]{1,2}' ATAU find . -iname 'myfile[0-9]{1,2}'

Dari apa yang saya lihat itu {1,2}bagian yang tidak berfungsi.

(Ngomong-ngomong, Anda bisa menggunakannya -name -regexsecara bergantian?)

Setiap bantuan dihargai.

Lukas88
sumber
1
-iname(dan -name) gunakan gumpalan , yang tidak memiliki sintaks ini.
l0b0

Jawaban:

10

Kamu bisa mencoba

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

atau

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
l0b0
sumber
Terima kasih - baris pertama bekerja untuk saya. Saya telah mencoba ini dengan -iname tetapi saya tidak berpikir itu mendukung sintaks atau kalau tidak saya melakukan sesuatu yang salah.
Lukas88
17

Jika Anda menemukan GNU, Anda dapat menggunakan jenis ekspresi reguler lain:

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

Menurut GNU findmenggunakan sintaks ekspresi reguler Emacs yang dikebiri secara default - Emacs mendukung \{from,to\}sintaks, tetapi setidaknya GNU findtidak mendukungnya.

Anehnya, manual referensi tidak menyertakan bagian pada sedsintaks ekspresi reguler, jadi siapa yang tahu bagian mana yang didukung.

l0b0
sumber
1
sedlike edsepertinya menjadi alias untuk posix-basic, jadi harus kompatibel dengan POSIX BRE (walaupun mendukung beberapa ekstensi like \+). Itu tidak kompatibel dengan GNU di sedmana misalnya [\n]cocok dengan baris baru, bukan backslash atau ndiperlukan oleh POSIX. Lihat juga -regextype posix-extendeduntuk POSIX EREs (so .*myfile[0-9]{1,2}), juga dengan ekstensi seperti \satau\<
Stéphane Chazelas
Saya tidak pernah tahu tentang -regypeype. Tampaknya jika Anda menggunakannya -regextype egrepsepertinya Anda dapat menghindari garis miring terbalik.
Sridhar Sarnobat