Coincidir con grep cuando el patrón contiene guiones "-"


11

Escribí el siguiente comando para hacer coincidir $ a con $ b, pero cuando el valor incluye "-", aparece un error. ¿Cómo puedo evitar eso?

# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified

3
Considere cambiar su comando para grep -Fxc -- "$b" <<< "$a"evitar la tubería innecesaria
— h3rrmiller

8
Por cierto, ¿realmente quieres una coincidencia de expresiones regulares, o simplemente quieres probar si una cadena es igual a (o es una subcadena de) otra cadena? En ese caso, el shell integrado [[ ... ]]o casesería una mejor opción, ya que evita tanto las idiosincrasias echocomo los procesos secundarios.
— Uwe

si una cadena es igual esta es mi prueba
— yael


Otra alternativa que no debe usar es que nadie figura en la lista: es posible escapar del guión dentro de una cadena entre comillas para que se entienda grepcomo un carácter literal en lugar del comienzo de una opción, es decir echo test-test | grep "\-test", coincidirá en lugar de quejarse de una -tbandera desconocida .
— Aaron

Respuestas:


20

Coloque --antes de su patrón:

echo "$a"  | grep -Fxc -- "$b"

-- especifica las opciones de fin de comando para muchos comandos / funciones integradas de shell, después de lo cual los argumentos restantes se tratan como argumentos posicionales.


13

Además de la gran respuesta de @ sebasth , podría decir que PATTERN con la grep's -e opción de usar PATTERN como patrón (aquí usando el <<< zshoperador here-string en lugar de echo; vea también la printf '%s\n' "$a"portabilidad).

grep -Fxc -e "$b" <<<"$a"

O todo al lado de otras opciones.

grep -Fxce "$b" <<<"$a"

Como su objetivo es la comparación de igualdad de cadena byte a byte, use el [comando en su lugar.

if [ "$a" = "$b" ]

O si $acontiene $b, usando la [[...]]construcción ksh:

if [[ $a == *"$b"* ]]

O más portátil en todos los proyectiles tipo Bourne:

case $a in
  *"$b"*) ...
esac

==no es estándar para el [comando; Es un bashismo . Usar en su =lugar.
— Comodín
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.