Jika aku melakukan:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Jika saya ingin daftar .rar
file saja, dan saya menggunakan grep , itu akan menunjukkan kepada saya juga .rar.part
file, apa yang bukan keinginan saya.
Saya memecahkan ini menggunakan find
atau ls **/*.rar
seperti yang diceritakan di utas ini dan mereka bekerja dengan baik, tapi saya ingin belajar apakah mungkin untuk melakukannya melalui grep
.
Saya sudah mencoba (memikirkan EOL
):
ls -R | grep ".rar\n"
tanpa hasil.
Saya pikir masalahnya terletak pada menemukan jika greping ditemukan di akhir baris , tetapi saya tidak yakin.
Ada bantuan di sini?
grep
dalam kasus ini? Mengapa tidakfind
?find
perintahnya bertentangan dengan Windows) dan ... belajar ;-). Pertanyaannya bukan tentang "Daftar File dalam dir" (itu hanya contoh kustom) melainkan "Memahami penggunaan perintah grep"ls -1R
.grep
. Lihat jawaban saya.-1R
saklar. Ternyata hasilnya sama.Jawaban:
The
$
anchor sesuai dengan akhir baris.Anda juga dapat menggunakan
find
ini:sumber
Selain pertanyaan Anda, harap perhatikan bahwa
.rar
tidak hanya cocok dengan ".rar" tetapi cocok dengan setiap karakter tunggal (termasuk.
) sebelumrar
. Dalam hal ini mungkin bukan masalah tetapi.
harus melarikan diri dalam regex.sumber
.asc
seperti*asc
pola? Jadi itu akan cocok, misalnyawhereverasc
,.xrar
.Anda juga dapat menginstruksikan
grep
untuk mencari string Anda mulai dari batas kata. A.
adalah salah satu dari batasan tersebut.Contoh
Katakanlah saya punya data sampel ini.
Perintah ini hanya akan menemukan file dengan
.rar
ekstensi.Bagaimana ini bekerja?
Situasi di mana ini tidak akan berhasil
Jika Anda memiliki file yang dinamai
blah-rar
ini akan terdeteksi juga.Itu karena karakter selain alfanumerik biasanya dianggap sebagai karakter batas, dan karenanya akan melewati pendekatan ini.
sumber
"
bukan tanda kutip sederhana?.rar
. Tetapi ini tidak akan menjadi masalah dengan penggunaanls -R
. Hanya jika Anda kebetulan menggunakannyals -Ra
.-P
Beralih kegrep
dalam contoh saya. Itu memicu interpretasi PCRE dari argumen tersebut.\n
) yang merupakan karakter hukum. Thels -1R
akan memaksa file yang akan ditampilkan dalam satu kolom terlepas.Kerjakan saja :
Anda tidak perlu
grep
sama sekali.CATATAN: Pekerjaan di atas ... kecuali masih setidaknya
afile-rar
dan saya tidak mengerti mengapa. Saya akan meninggalkannya di sini, tetapi saya tidak bangga akan hal itu. Bagaimanapun, seperti yang orang lain katakan:sumber
xrar
atauafile-rar
.afile-rar
danxrar
masih dimasukkan dalam output. Tidak ada perubahan dengan mod terbaru Anda. Masalah sial tidak? Sangat menyenangkan mencoba menyelesaikannya tanpa metode reguler 8-)-dash
melalui. Halxrar
yang bisa saya tangani, tapi bukan-dash.
saya yang tidak mengerti-dash.
Gunakan tanda kutip tunggal untuk membuat $ berfungsi sebagai end-of-line. Jika Anda juga ingin menggunakan beberapa variabel, gunakan kombinasi tanda kutip ganda dan tunggal seperti di bawah ini:
Posting saya sebelumnya telah dihapus mengatakan itu rangkap. Izinkan saya menjelaskan bagaimana ini berbeda.
Posting lain menyebutkan penggunaan penuh tanda kutip ganda
""
, atau penggunaan penuh tanda kutip tunggal''
. Mereka berdua memiliki keterbatasan masing-masing. Mengikuti menjelaskannya.Masalah dengan semua tanda kutip ganda adalah sebagai berikut:
grep "pattern$"
memberikan kesalahan berikut:Illegal variable name.
Dan menggunakan semua tanda kutip tunggal berfungsi, tetapi jika Anda ingin substitusi variabel, semua tanda kutip tunggal tidak akan berfungsi. Sebagai contoh:
Jika saya memiliki string
A_BOOK
, termasuk string lain dalam file FILE.Jika saya mengatur BUKU ke variabel BK
Jika saya menerima semua tanda kutip ganda, saya mendapatkan kesalahan berikut
grep "${BK}$" FILE*
:: $ 1 untuk substitusi variabel, 2 untuk akhir pola ( nama variabel ilegal ).Jika saya menerima semua tanda kutip, subtitusi variabel tidak terjadi.
grep '${BK}$' FILE
tidak mengembalikan apa punJika saya menggunakan kombinasi tanda kutip ganda dan tunggal, saya mendapatkan apa yang saya harapkan. Kutipan ganda untuk substitusi variabel, dan tanda kutip tunggal untuk akhir pola.
sumber
"foo$"
sintaks bekerja dengan baik pada sh dan keluarga.Jika setelah mengikuti hal di atas dan tidak ada yang berhasil, itu mungkin karena akhir baris. Untuk memperbaiki, lakukan:
dos2unix pr0n.txt
dan lakukangrep
lagi.sumber