Привет друзья. Имеется регулярное выражение в команде вида:
echo 'hello world' | grep -oP 'hello \K(world)'
Как сделать, чтобы в регулярном выражении вместо текста hello я мог использовать переменную $hello? Т.к. если подставлять переменную вместо текста, то регулярное выражение перестаёт работать.
Чтобы результатом пайпа была какая-то строка, нужно чтобы переменная $hello содержала какую-то подстроку из строки hello world. Тогда пример dexpl будет работать.
А вообще, в bash есть встроенный regex, для которого не обязательно вызывать нестандартизированный perl-regex в grep. И сразу получим результат в переменной и без всяких пайпов.
на UNIX System V Release 3.2 нет bash, не портабельно
У человека есть ТЗ, написать на bash. В современном мире если нет bash-а, то либо его поставят, либо такое ТЗ не будет. А вот grep-а с pcre надо оговаривать отдельно. ТС вроде уже третий топик создаёт на эту задачу, отказывающийся от правильного ответа, заключающегося в том, что если надо разбивать на слова (см его regex), то для этого изобретен awk, где нет проблем с переменными и прочими вычислениями третьего слова (см соседний топик). Упорно талдычит свой grep. Ну так пусть и пишет, что в задаче стоит не bash, а как сделать только на основе grep.
Спасибо за помощь и внимание к моей проблеме.
Указанное регулярное выражение я использую чтобы оставить текст только между определёнными символами.
Допустим у меня строка в которой надо оставить только текст между символами W и Y, можете подсказать как это более эффективно реализуется через awk?
На входе у меня набор текста, чаще всего это код веб страницы.
На выходе у меня строка или несколько строк, из которых отсеян ненужный текст. Вот самая первая моя задача для которой мне как раз и подсказали решение с pcre
Задача получить в bash вывод со страницы https://www.postgresql.org/ftp/source/ , где содержались только бы номера версий ПО и ничего более.
Вот так я решаю эту задачу:
curl -s https://www.postgresql.org/ftp/source/ | grep -Po 'alt=«v\K.*?(?=»)'
Т.е. оставляю только вывод который находится между alt=«v и »
Как вы предлагаете решать такие задачи через awk?