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''
Utilizar:
grep -- -X
Relacionados: ¿Qué significa un doble tablero desnudo? (Gracias a nutty sobre natty ).
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.