URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8112
[ Назад ]

Исходное сообщение
"как выдернуть подстроку (регулярное выражение)"

Отправлено xristofer_robin , 26-Фев-09 13:41 
string="aSlfd lk(An.)"
нужно в переменной R1 получить "aSlfd lk" а в переменной R2 "*An.*" т.е. все что находится внутри круглых скобок.

Пытался сделать
R2=`echo "$c" | grep -E -o  '\([a-Z0-9*. \ ]{1,}\)'`

результат (An.) - но он в скобках, а мне скобки не нужны, и еще, стоит появится в строке string символ звездочки "aSlfd lk(*df)" - баш выводит список файлов моего хома.

Подскажите, как правильно написать регулярное выражение.


Содержание

Сообщения в этом обсуждении
"как выдернуть подстроку (регулярное выражение)"
Отправлено Andrey Mitrofanov , 26-Фев-09 13:51 
>string="aSlfd lk(An.)"
>Пытался сделать
>R2=`echo "$c" | grep -E -o  '\([a-Z0-9*. \ ]{1,}\)'`
>
>результат (An.) - но он в скобках, а мне скобки не нужны,

|egrep -o  '\([a-Z0-9*. \ ]{1,}\)' |egrep -o '[^()]+'
или на sed-е склепать чего - одной командой.

Ну, и традиционное: оно точно на баше надо?.. Впочем, сам так же от перла "бегаю". ;)

>и еще, стоит появится в строке string символ звездочки "aSlfd lk(*df)"
>- баш выводит список файлов моего хома.

Слово "экранирование"... Сокровенное знание! Т-с-с, об этом нельзя!! :-P (Да, раз в недёлю - одно и то же, в этом форуме...)


"как выдернуть подстроку (регулярное выражение)"
Отправлено xristofer_robin , 26-Фев-09 15:03 
а на sed как это сделать?


"как вы-sed-нуть"
Отправлено Andrey Mitrofanov , 26-Фев-09 15:09 
>а на sed как это сделать?

Ну, как....

'\([a-Z0-9*. \ ]{1,}\)'

|sed -n 's!^[^(]\+(\([a-Z0-9*. \ ]\+\)).*$!\1!p'

Как-нибудь так... Не проверял, не отлаживал и не буду.


"как выдернуть подстроку (регулярное выражение)"
Отправлено Hetzer , 27-Фев-09 08:56 
>[оверквотинг удален]
>
>результат (An.) - но он в скобках, а мне скобки не нужны,
>и еще, стоит появится в строке string символ звездочки "aSlfd lk(*df)"
>- баш выводит список файлов моего хома.
>
>Подскажите, как правильно написать регулярное выражение.
>
>
>
>

а зачем усложнять? :)

echo "aSlfd lk(An.)"|cut -d "(" -f2|cut -d ")" -f1


"как выдернуть подстроку (регулярное выражение)"
Отправлено vic , 27-Фев-09 11:14 
>[оверквотинг удален]
>
>Пытался сделать
>R2=`echo "$c" | grep -E -o  '\([a-Z0-9*. \ ]{1,}\)'`
>
>результат (An.) - но он в скобках, а мне скобки не нужны,
>и еще, стоит появится в строке string символ звездочки "aSlfd lk(*df)"
>- баш выводит список файлов моего хома.
>
>Подскажите, как правильно написать регулярное выражение.
>

играем с awk:
r1=$(echo $string | awk -F'[()]' '{print $1}')
r2=`echo $string | awk -F'[()]' '{print $2}'`


"да, када ж ано кончится-то? :-D"
Отправлено Andrey Mitrofanov , 27-Фев-09 12:06 
$ string="aSlfd lk(An.)"; IFS='()' read r1 r2 <<<"$string"; echo "##$r1##$r2##"
##aSlfd lk##An.##
$ _

"да, када ж ано кончится-то? :-D"
Отправлено vic , 27-Фев-09 12:49 
>$ string="aSlfd lk(An.)"; IFS='()' read r1 r2 <<<"$string"; echo "##$r1##$r2##"
>##aSlfd lk##An.##
>$ _

+1