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 -regex
secara bergantian?)
Setiap bantuan dihargai.
bash
find
regular-expression
Lukas88
sumber
sumber
-iname
(dan-name
) gunakan gumpalan , yang tidak memiliki sintaks ini.Jawaban:
Kamu bisa mencoba
atau
sumber
Jika Anda menemukan GNU, Anda dapat menggunakan jenis ekspresi reguler lain:
Menurut GNU
find
menggunakan sintaks ekspresi reguler Emacs yang dikebiri secara default - Emacs mendukung\{from,to\}
sintaks, tetapi setidaknya GNUfind
tidak mendukungnya.Anehnya, manual referensi tidak menyertakan bagian pada
sed
sintaks ekspresi reguler, jadi siapa yang tahu bagian mana yang didukung.sumber
sed
likeed
sepertinya menjadi alias untukposix-basic
, jadi harus kompatibel dengan POSIX BRE (walaupun mendukung beberapa ekstensi like\+
). Itu tidak kompatibel dengan GNU dised
mana misalnya[\n]
cocok dengan baris baru, bukan backslash ataun
diperlukan oleh POSIX. Lihat juga-regextype posix-extended
untuk POSIX EREs (so.*myfile[0-9]{1,2}
), juga dengan ekstensi seperti\s
atau\<
-regextype egrep
sepertinya Anda dapat menghindari garis miring terbalik.