The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"поиск подстроки в строке"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"поиск подстроки в строке"  
Сообщение от akov email(ok) on 29-Авг-06, 12:58 
Задача найти вхождение подстроки в строке
var1="234 345 456"
var2="345"
Делаю echo `expr match "$var1" '\("$var2"\)'`
выдает пусто...хотя должен 345
если задаю так:
echo `expr match "$var1" '\("345"\)'` тоже пусто
echo `expr match "$var1" '\("$234"\)'`
выдает 234...
НЕ могу понять в чем причина!!! Подскажите плз.!!

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "поиск подстроки в строке"  
Сообщение от regunkov (ok) on 29-Авг-06, 13:38 
>Задача найти вхождение подстроки в строке
>var1="234 345 456"
>var2="345"
>Делаю echo `expr match "$var1" '\("$var2"\)'`
>выдает пусто...хотя должен 345
>если задаю так:
>echo `expr match "$var1" '\("345"\)'` тоже пусто
>echo `expr match "$var1" '\("$234"\)'`
>выдает 234...
>НЕ могу понять в чем причина!!! Подскажите плз.!!

Немного не в тему, но если в качестве разделителя один из символов $IFS, то можно искать средствами шела.

findflag() {
    local l_name l_flag l_w

    l_name="$1"
    l_flag="$2"
    
    for l_w in $(eval echo -E \"\${${l_name}}\"); do
    case "${l_w}" in
        ("${l_flag}")
        return 0
        ;;
        (*)
        continue
        ;;
    esac
    done
    
    # not found
    return 1
}

var1="234 345 456"
var2="345"

findflag "var1" "$var2" && echo -E "$var2"

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "поиск подстроки в строке"  
Сообщение от olegos on 31-Авг-06, 06:03 
>>Задача найти вхождение подстроки в строке
>>var1="234 345 456"
>>var2="345"
>>Делаю echo `expr match "$var1" '\("$var2"\)'`
>>выдает пусто...хотя должен 345
>>если задаю так:
>>echo `expr match "$var1" '\("345"\)'` тоже пусто
>>echo `expr match "$var1" '\("$234"\)'`
>>выдает 234...
>>НЕ могу понять в чем причина!!! Подскажите плз.!!
>
>Немного не в тему, но если в качестве разделителя один из символов
>$IFS, то можно искать средствами шела.
>
>findflag() {
>    local l_name l_flag l_w
>
>    l_name="$1"
>    l_flag="$2"
>
>    for l_w in $(eval echo -E \"\${${l_name}}\"); do
>
> case "${l_w}" in
>     ("${l_flag}")
>     return 0
>     ;;
>     (*)
>     continue
>     ;;
> esac
>    done
>
>    # not found
>    return 1
>}
>
>var1="234 345 456"
>var2="345"
>
>findflag "var1" "$var2" && echo -E "$var2"
>


expr match "$var1" ".*$var2"
у меня выдает номер последнего найденого символа

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "поиск подстроки в строке"  
Сообщение от Bootmen email(??) on 31-Авг-06, 16:29 
>Задача найти вхождение подстроки в строке
>var1="234 345 456"
>var2="345"

Не мучайся , есть универсальное средство awk
echo var1 | awk ' { if match($0, /"'$var2'"/)
{ print RSTART, RLENGTH, $0 }
  }'
exit 0

Простенько и со вкусом. Вобщем awk на все руки мастер.
В выше примере он ищет начало (RSTART) и конец (RLENGTH) искомой строки,
а потом его распечатывает.
Можно в /.../ использовать регулярные выражения.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "поиск подстроки в строке"  
Сообщение от Bootmen email(??) on 31-Авг-06, 17:21 
Пардон ошибка вкралась: echo $var1|awk....
Так правильнее будет
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру