¿Cómo puedo grep complejo de cadenas en variables?

Estoy tratando de grep para una pequeña cadena en una mucho más grande de la cadena. Ambas cadenas se almacenan como variables y aquí es un ejemplo de código:

#!/bin/bash

long_str=$(man man)
shrt_str="guide"

if grep -q $shrt_str $long_str ; then
        echo "Found it!"
fi

No creo que la expansión de la variable está trabajando de la manera que esperaba. He intentado [ ] y [[ ]], también citando las variables y la tubería de salida de /dev/null pero no importa lo que haga no va a funcionar.

¿Alguien tiene alguna idea?

InformationsquelleAutor Craig | 2010-01-21

4 Kommentare

  1. 38
    if echo "$long_str" | grep -q "$shrt_str";then
      echo "found"
    fi

    o

    echo "$long_str" | grep  -q  "$shrt_str"  && echo "found" || echo "not found"

    Pero ya que usted está usando la shell de bash, a continuación, utilizar la cáscara de la parte interna. No es necesario llamar a comandos externos

    shrt_str="guide"
    case "$long_str" in 
       *"$shrt_str"* ) echo "Found";;
       * ) echo "Not found";;
    esac
    • De niza. El caso anterior declaración de que debería ser válido en el original sh demasiado.
    • El mejor ejemplo de cómo grep una cadena (en lugar de archivo) que he encontrado en línea. Gracias
    • Mejor llamar a comandos externos, se obtiene menos dependiente de la shell.
  2. 7

    Otro Bash-técnica específica:

    if [[ $long =~ $short ]]    # regex match
    then
        echo "yes"
    fi

    Pero si usted no necesita el largo de cadena en una variable:

    if man man | grep $short; then ...

    pero estoy asumiendo que era sólo para el propósito de tener un ejemplo.

    • He probado el =~ solución pero no funcionó. Ni la prueba de la página man de incluir el «~» como un operador.
    • =~ no es un test operador, es un golpe de operador (tenga en cuenta la doble corchetes). También funciona en ksh y zsh.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein