Quiero grep para la cadena que comienza con un guión / guión, como -X
en un archivo, pero es confuso como un argumento de línea de comando.
He intentado:
grep "-X"
grep \-X
grep '-X'
Utilizar:
grep -- -X
Relacionado: ¿Qué significa un doble guión simple? (Gracias a nutty sobre natty ).
--
significa o hace: unix.stackexchange.com/questions/11376/…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
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:
Lo invoco como:
Tienes la idea.
fuente
grep -e -X
Hará el truco.fuente
-P
(pero esa es otra historia y no se aplica aquí)).grep -e '--cut here--' *
busca todas las líneas que coinciden‘--cut here--’
. Sin -e, grep intentaría analizar‘--cut here--’
como una lista de opciones.fuente
No tengo acceso a una máquina Solaris, pero
grep "\-X"
funciona para mí en Linux.fuente
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.
fuente
Si está utilizando otra utilidad que pasa un único argumento a grep, puede usar:
fuente
puedes usar nawk
fuente
Espero que este sirva tu propósito.
fuente
grep "^ -X" archivo
Grep y seleccionará todas las líneas del archivo. ^ en el grep "^" indica una línea que comienza con
fuente
-
, no líneas.