2010-03-11 22 views

Respuesta

289

Uso:

grep -- -X

relacionados: What does a bare double dash mean? (gracias a nutty about natty).

+24

' - -' es un truco útil para una serie de utilidades Unix. – Johnsyweb

+1

Funciona con 'ack' – dukedave

+43

para aquellos de nosotros preguntándonos en esta etapa qué significa' --' o lo hace: http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean –

22

grep -e -X hará el truco.

+1

mi grep no tiene -e, muy extrañas – Mike

+13

Solaris para la perderá – Mike

+1

Disponible en Solaris desde/usr/xpg4/bin/grep, por cierto. Un montón de utilidades más completas en ese directorio. – pra

6

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

+0

¡No funciona con la bandera -F! –

1

puede utilizar nawk

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

El guión es un carácter especial en Bash como se ha señalado en http://tldp.org/LDP/abs/html/special-chars.html#DASHREF. Así que escapar de esta vez solo te permite superar a Bash, pero Grep todavía tiene su propio significado para los guiones (proporcionando opciones).

Así que realmente necesita escapar dos veces (si prefiere no usar las otras respuestas mencionadas). Lo siguiente/debería funcionar

grep \\-X 
grep '\-X' 
grep "\-X" 

Una manera de probar cómo Bash pasa argumentos a un script/programa es crear un script .sh que sólo ecos todos los argumentos. Yo uso un script llamado echo-args.sh para jugar de vez en cuando, todo lo que contiene es:

echo $* 

invoco como:

bash echo-args.sh \-X 
bash echo-args.sh \\-X 
bash echo-args.sh "\-X" 

Usted consigue la idea.

3

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 observa los mismos fenómenos en otras herramientas de línea de comandos; como la mayoría de ellos son herramientas de GNU, y usan esta llamada, exhiben el mismo comportamiento.

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

1

Si utiliza otra utilidad que pasa un solo argumento a grep, puede utilizar:

'[-]X' 
12
grep -- -X 
grep -- "-X" 
grep \\-X 
grep "\-X" 
grep -e -X 
grep [-]X 
0
ls -l | grep "^-" 

Esperanza éste podría servir a su propósito.

+1

Esta expresión captura solo las líneas que comienzan con un guion. No cumple con la pregunta inicial. Él quiere buscar una cadena que comience por un guion, pero las líneas que contienen esta cadena no necesariamente comienzan con un guion. En la pregunta inicial, la cadena que comienza con un guión puede estar en cualquier lugar de la línea. –

0

grep archivo "^ -X"

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

+1

Ya hay una respuesta que sugiere que http://stackoverflow.com/a/27440348/441757 (publicado hace más de un año) – sideshowbarker

+0

El OP está buscando * cadenas * que comienza con '-', no con líneas. – codeforester

Cuestiones relacionadas