Saya ingin grep untuk string yang dimulai dengan tanda hubung / tanda hubung, seperti -X
, dalam file, tapi ini membingungkan sebagai argumen baris perintah.
Saya sudah mencoba:
grep "-X"
grep \-X
grep '-X'
Menggunakan:
grep -- -X
Terkait: Apa arti dasbor ganda telanjang? (Terima kasih banyak tentang natty ).
--
artinya atau tidak: unix.stackexchange.com/questions/11376/…ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
,.Tanda hubung adalah karakter khusus di Bash seperti yang tercantum di http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Jadi lolos dari hal ini hanya membuat Anda melewati Bash, tetapi Grep masih memiliki makna sendiri untuk berlari (dengan memberikan opsi).
Jadi Anda benar-benar perlu menghindarinya dua kali (jika Anda memilih untuk tidak menggunakan jawaban yang disebutkan lainnya). Berikut ini akan / harus berfungsi
Salah satu cara untuk mencoba bagaimana Bash meneruskan argumen ke skrip / program adalah dengan membuat skrip .sh yang hanya menggemakan semua argumen. Saya menggunakan skrip yang disebut echo-args.sh untuk bermain dari waktu ke waktu, semua isinya adalah:
Saya menyebutnya sebagai:
Anda mendapatkan idenya.
sumber
grep -e -X
akan melakukan trik.sumber
-P
(tapi itu cerita lain dan tidak berlaku di sini))grep -e '--cut here--' *
mencari semua baris yang cocok‘--cut here--’
. Tanpa -e, grep akan mencoba mengurai‘--cut here--’
sebagai daftar opsi.sumber
Saya tidak memiliki akses ke mesin Solaris, tetapi
grep "\-X"
bekerja untuk saya di linux.sumber
Cara yang benar adalah dengan menggunakan "-" untuk menghentikan pemrosesan argumen, sebagaimana telah disebutkan. Ini disebabkan oleh penggunaan getopt_long (fungsi-GNU dari getopt.h) di sumber alat.
Inilah sebabnya mengapa Anda memperhatikan fenomena yang sama pada alat baris perintah lainnya; karena kebanyakan dari mereka adalah alat GNU, dan menggunakan panggilan ini, mereka menunjukkan perilaku yang sama.
Sebagai catatan tambahan - getopt_long adalah yang memberi kita pilihan keren antara -rlo dan --really_long_option dan kombinasi argumen dalam interpreter.
sumber
Jika Anda menggunakan utilitas lain yang melewati satu argumen untuk di-grep, Anda dapat menggunakan:
sumber
Anda bisa menggunakan nawk
sumber
Semoga yang ini melayani tujuan Anda.
sumber
grep "^ -X" file
Itu akan grep dan memilih semua baris dari file. ^ dalam grep "^" menunjukkan baris yang dimulai dengan
sumber
-
, bukan garis.