varios varias test sólo start solo siguientes regulares regresará que patrones palabras palabra mostrará líneas los las expresiones exacta egrep cuál con comienzan comiencen comandos buscar unix grep escaping

unix - varias - ¿Cómo puedo grep para una cadena que comienza con un guión/guión?



¿cuál de los siguientes comandos mostrará sólo las líneas que comienzan con start? (10)

Quiero grep para la cadena que comienza con un guión / guión, como -X , en un archivo, pero esto es confuso como un argumento de línea de comandos.

He intentado:

grep "-X" grep /-X grep ''-X''


El guión es un carácter especial en Bash como se indica en http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Así que escapar de esto una vez solo te hace pasar a Bash, pero Grep aún tiene su propio significado para los guiones (al proporcionar opciones).

Así que realmente necesitas escapar dos veces (si prefieres no usar las otras respuestas mencionadas). La siguiente voluntad / 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. Utilizo 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


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.

Esta es la razón por la que observa los mismos fenómenos en otras herramientas de línea de comandos; Ya que la mayoría de ellas son herramientas GNU, y usan esta llamada, exhiben el mismo comportamiento.

Como nota al margen, getopt_long es lo que nos da la opción perfecta entre -rlo y --really_long_option y la combinación de argumentos en el intérprete.


No tengo acceso a una máquina Solaris, pero grep "/-X" funciona para mí en Linux.


Si está usando otra utilidad que pasa un solo argumento a grep, puede usar:

''[-]X''



archivo grep "^ -X"

Se grep y recoger todas las líneas del archivo. ^ en el grep "^" indica una línea que comienza con


puedes usar nawk

$ nawk ''/-X/{print}'' file


grep -e -X hará el truco.


grep -- -X grep -- "-X" grep //-X grep "/-X" grep -e -X grep [-]X


ls -l | grep "^-"

Espero que este sirva para su propósito.