Jawaban:
Menggunakan:
grep -- -X
Terkait: Apa arti dasbor ganda telanjang? (Terima kasih banyak tentang natty ).
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
grep \\-X
grep '\-X'
grep "\-X"
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:
echo $*
Saya menyebutnya sebagai:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Anda mendapatkan idenya.
grep -e -X
akan melakukan trik.
-P
(tapi itu cerita lain dan tidak berlaku di sini))
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
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.
Anda bisa menggunakan nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Semoga yang ini melayani tujuan Anda.
grep "^ -X" file
Itu akan grep dan memilih semua baris dari file. ^ dalam grep "^" menunjukkan baris yang dimulai dengan
-
, bukan garis.
--
artinya atau tidak: unix.stackexchange.com/questions/11376/…