Utilizando grep para encontrar substring entre duas variáveis de string que contêm caminhos

0

Eu simplesmente quero confirmar que um caminho existe em outro caminho usando variáveis de string.

Meu script:

#!/bin/bash

HAYSTACK="/cygdrive/d/var/www/html/adm4"
NEEDLE="/cygdrive/d/var/www/html"

# first try
#grep -q "$NEEDLE" "$HAYSTACK"

#second try
grep -q "${NEEDLE}" "${HAYSTACK}"

if [ $? -eq 0 ] ; then
    echo  "Your string has been found"
else
    echo "Your string has not been found"
fi

Resultados:

me@localhost ~]$ ./testbash
grep: : No such file or directory
Your string has not been found

Eu suspeito que, como esses são caminhos, preciso fazer um pouco mais.

    
por TekiusFanatikus 21.12.2016 / 21:52

2 respostas

3

Grep espera que o comando no formato grep [options] PATTERN [FILE...] trate a segunda string como um arquivo para examinar. Se for apenas uma linha, você pode enviá-la no stdin.

echo $haystack | grep $needle

Ou como preferir. Talvez com uma string aqui:

grep $needle <<< $haystack
    
por 21.12.2016 / 22:12
2

O Bash tem correspondência de padrões integrada com o operador de comparação == ao usar o formulário [[ ]] , então você pode fazer algo assim para evitar chamar o grep completamente:

if [[ $HAYSTACK == *${NEEDLE}* ]] ; then
    echo "Your string has been found"
else
    echo "Your string has not been found"
fi

Se você precisar realizar uma correspondência mais complexa, o Bash também oferece suporte à correspondência de expressão regular com o operador =~ .

    
por 21.12.2016 / 22:57