Подтвердить что ты не робот

Как я могу grep сложные строки в переменных?

Я пытаюсь grep для маленькой строки в гораздо большей строке. Обе строки хранятся как переменные, и вот пример кода:

#!/bin/bash

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

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

Я не думаю, что переменное расширение работает так, как я ожидаю. Я пробовал [ ] и [[ ]], также цитируя переменные и выдавая вывод на /dev/null, но независимо от того, что я делаю, это не сработает.

Есть ли у кого-нибудь идеи?

4b9b3361

Ответ 1

echo "$long_str" | grep -q "$shrt_str"
if [ $? -eq 0 ];then
  echo "found"
fi

или

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

Но поскольку вы используете оболочку bash, используйте внутренние оболочки. Нет необходимости вызывать внешние команды

shrt_str="guide"
case "$long_str" in 
   *"$shrt_str"* ) echo "Found";;
   * ) echo "Not found";;
esac

Ответ 2

grep для файлов или stdin. Если вы хотите использовать переменную как stdin, вам нужно использовать bash обозначение:

if grep -q "$shrt_str" <<< "$long_str" ; then

Ответ 3

Вы хотите

if echo $long_str | grep -q $shrt_str; then

Ответ 4

Другая Bash -специальная техника:

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

Но если вам не нужна длинная строка в переменной:

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

но я предполагаю, что это было просто для того, чтобы иметь пример.