Как в posix shell проверить есть ли заданное словосочентание в строке?

Есть строка и надо проверить есть ли в этой строке шаблонное словосочетание, как это сделать не на bash, а на shell(зависимость от платформы). Написал на BASH, но на sh не работает:

#!/bin/bash

echo "Hello world"

CONFIG=/etc/sys/config

if [[ "$CONFIG" = * "sys/config" * ]];then

echo success;

fi

Как это адаптировать под старый shell /bin/sh ?


Ответы (1 шт):

Автор решения: aleksandr barakin

например, можно воспользоваться программой grep:

#/bin/sh

text="о сколько нам открытий чудных"
pattern1="нам открытий"
pattern2="нет открытий"

if echo "${text}" | grep -q "${pattern1}"; then
  echo "строка '${text}' содержит подстроку '{$pattern1}'"
else
  echo "строка '${text}' не содержит подстроку '${pattern1}'"
fi

if echo "${text}" | grep -q "${pattern2}"; then
  echo "строка '${text}' содержит подстроку '${pattern2}'"
else
  echo "строка '${text}' не содержит подстроку '${pattern2}'"
fi

результат выволнения:

строка 'о сколько нам открытий чудных' содержит подстроку 'нам открытий'
строка 'о сколько нам открытий чудных' не содержит подстроку 'нет открытий'

а можно и не порождать новый процесс, а воспользоваться возможностями parameter expansion:

#/bin/sh

text="о сколько нам открытий чудных"
pattern1="нам открытий"
pattern2="нет открытий"

if [ -z "${text##*${pattern1}*}" ]; then
  echo "строка '${text}' содержит подстроку '${pattern1}'"
else
  echo "строка '${text}' не содержит подстроку '${pattern1}'"
fi

if [ -z "${text##*${pattern2}*}" ]; then
  echo "строка '${text}' содержит подстроку '${pattern2}'"
else
  echo "строка '${text}' не содержит подстроку '${pattern2}'"
fi

результат выполнения аналогичный.

→ Ссылка