Respuestas:
Utilizar:
grep -- -X
Relacionado: ¿Qué significa un doble guión simple? (Gracias a nutty sobre natty ).
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
.
El guión es un carácter especial en Bash como se señala en http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Así que escapar de esto una vez solo te lleva a Bash, pero Grep todavía tiene su propio significado para guiones (al proporcionar opciones).
Entonces, realmente necesita escapar dos veces (si prefiere no usar las otras respuestas mencionadas). Lo siguiente debe / debería funcionar
grep \\-X
grep '\-X'
grep "\-X"
Una forma de probar cómo Bash pasa los argumentos a un script / programa es crear un script .sh que solo haga eco de todos los argumentos. Uso un script llamado echo-args.sh para jugar de vez en cuando, todo lo que contiene es:
echo $*
Lo invoco como:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Tienes la idea.
grep -e -X
Hará el truco.
-P
(pero esa es otra historia y no se aplica aquí)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
La forma correcta sería usar "-" para detener el procesamiento de argumentos, como ya se mencionó. Esto se debe al uso de getopt_long (función C de GNU de getopt.h) en la fuente de la herramienta.
Es por eso que notas el mismo fenómeno en otras herramientas de línea de comandos; Como la mayoría de ellos son herramientas GNU, y usan esta llamada, exhiben el mismo comportamiento.
Como nota al margen, getopt_long es lo que nos da la buena opción entre -rlo y --really_long_option y la combinación de argumentos en el intérprete.
puedes usar nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
Espero que este sirva tu propósito.
grep "^ -X" archivo
Grep y seleccionará todas las líneas del archivo. ^ en el grep "^" indica una línea que comienza con
-
, no líneas.
--
significa o hace: unix.stackexchange.com/questions/11376/…