Как в 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
результат выполнения аналогичный.