Как я могу 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
, но независимо от того, что я делаю, это не сработает.
Есть ли у кого-нибудь идеи?
Ответы
Ответ 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 ...
но я предполагаю, что это было просто для того, чтобы иметь пример.