Saya ingin membuat daftar isi pwd dan hanya menampilkan file yang dimulai dengan titik. Saya sudah mencoba ls -a | grep ^\.
tetapi saya tidak tahu mengapa output juga berisi file-file yang tidak dimulai dengan titik. Sebagai contoh:
Pictures
.pip
.pki
.profile
projects
Public
Saya tahu bahwa saya dapat mencapai apa yang saya inginkan dengan ls -ld .*
saya hanya ingin tahu tentang perilaku grep ini yang tidak dapat saya jelaskan.
grep
regular-expression
ps-aux
sumber
sumber
ls -d .*
mendaftar semua file yang dimulai dengan.
?Jawaban:
Kutip argumen untuk
grep
ituls -a | grep '^\.'
Alasan untuk ini adalah bahwa shell menangani
\.
dan mengubahnya kembali menjadi polos.
, yanggrep
kemudian diperlakukan sebagai wildcard satu karakter. Jika ragu, selalu kutip string yang berisi (atau mungkin mengandung) karakter yang spesial untuk shell.sumber
grep ^\\.
, \\ diperlakukan oleh shell sebagai backslash tunggal dan lagi grep memperlakukan backslash tunggal diikuti oleh titik sebagai titik literal.Anda perlu memasukkan grep regex di dalam tanda kutip.
Catatan: Jangan parsing output dari
ls
perintah .sumber
Jika Anda menjalankan cmd ls -a | grep ^ \. maka grep jangan menganggap "\" sebagai karakter khusus dan makna "." jangan sampai lolos.
Ketika kita menggunakan cmd ls -a | grep "^ \." maka grep menganggap "\" sebagai karakter khusus dan makna "." melarikan diri. Ini akan memberi Anda hasil seperti yang diharapkan.
Jika Anda ingin menggunakan grep cmd tanpa tanda kutip maka Anda juga harus melarikan diri dari karakter "\". Anda dapat mengharapkan hasil tanpa tanda kutip ganda dengan mengikuti perintah. ls -a | grep ^ \\.
Untuk detail tentang arti karakter khusus di Regex, lihat tautan berikut. http://www.regular-expressions.info/quickstart.html
sumber