Linux. Есть ли слово в строке. Есть ли подстрока в строке.
Довольно частой задачей является узнать, встречается ли в строке какое-нибудь слово или же, в более общем случае, подстрока.
Для решения можно воспользоваться внутренними механизмами bash, но я покажу более башенезависимый способ, с помощью grep. Благо он есть практически везде, даже в каких-нибудь системах, основанных на BusyBox, а вот вместо bash может встретится и просто sh, и что-нибудь более экзотическое.
Предположим, что в переменной
STR имеется строка:STR="cat lynx lion coguar"В переменную
SUBSTR запишем первый параметр командной строки скрипта ($1):SUBSTR="$1"Выводим содержимое переменной
$STR, передаем вывод grep с нужными параметрами, а результат сохраняем в переменную-счетчик:CNTR=`echo "$STR" | grep -w -c "$SUBSTR"`В данной команде более всего интересны параметры
grep:-w - искать целое слово.Примечание: Словом по умолчанию считается все, что отделено от других символов пробелом(-ами) табуляцией(-ами) или переводом(-ами) строки.
-с - подсчитать количество строк с нужным вхождениемПримечание: Ключ
-с заставляет grep подсчитывать строки, а не сами вхождения, так что количество вхождений слова в строку, так посчитать не получится.В итоге в переменной
CNTR оказывается 0, если совпадений нет, и 1, если совпадение есть, остается только проверить:if [ "$CNTR" -ne 0 ];then
echo "Exist"
else
echo "Not exist"
fiДемо-скрипт на GitHub
Примеры работы:
./exist-word lionВывод:
Exist./exist-word dog
./exist-word liВывод:
Not existПод подстрокой имеется любой набор символов, идущих подряд.
Задача решается аналогично предыдущей, только из параметров
grep удаляется ключ -wЕсли из вышеуказанного скрипта удалить ключ
-w grep'а, то вывод будет таким:./exist-word liВывод:
ExistТ.е. теперь была найдена подстрока
li (часть слова lion).Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2020/07/02/linu