Как в bash найти строку заканчивающуюся на подстроку и вывести ее?
Eсть строка string="some text remi other text". Нужно извлечь из нее подстроку some text remi. Как это можно сделать?
Я смог только ивлечь "some text " с помощью команды:echo ${string%remi*}
Ответы (2 шт):
не совсем понятно сформулированно условие задачи
если я верно понял, то
нужно найти строку в которой присутствует указанная(remi) подстрока, а затем вывести первую половину данной строки, то есть, от начала(^) всей строки до найденной подстроки(remi) включительно.
пример:
строка -- some text remi other text
подстрока -- remi
результат -- some text remi
для этого достаточно использовать grep
grep -o ".*remi"
пример для одной строки
$ echo "some text remi other text" | grep -o ".*remi"
some text remi
p.s.
ниже в комментариях @ipatev_nn намекнул на то что подстрок в самой строке может быть несколько, по крайней мере это не ограниченно начальными условиями, поэтому для полноты картины попробуем учесть данный вариант. Итак, если подстрок в строке больше чем одна то
учитывать последнее вхождение подстроки в строку
grep -o ".*remi"
учитывать первое вхождение подстроки в строку
grep -oP "^.*?remi"
вариант @ipatev_nn из комментариев ниже
от себя добавлю еще вариант с awk
awk '/remi/{sub(/remi.*/,"remi");print}'
Преобразуйте строку в массив и выводите что хотите:
$ string="some text remi other text"
$ array=($string)
$ echo ${array[@]:0:3}
some text remi
$ echo ${array[3]} ${array[0]} ${array[2]} ${array[1]}
other some remi text