shell + команда test (не работают метасимволы)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

ultros
Сообщения: 24
ОС: Linux

shell + команда test

Сообщение ultros »

Привет.
Пример:
[ 11G = G$ ] или test 11G = G$
echo $?
1
Подскажите как можно указать "любое значение стоящее до символа G" ?
Спасибо сказали:
_beast
Сообщения: 77
ОС: linux 2.6

Re: shell + команда test

Сообщение _beast »

Что то я не совсем понял вопрос. Можно задать вопрос еще раз только русским языком?
Спасибо сказали:
Burnout
Сообщения: 88
ОС: Gentoo Linux

Re: shell + команда test

Сообщение Burnout »

Я что-то тоже ничего не понял. Кстати, не G$, а $G.
Спасибо сказали:
_beast
Сообщения: 77
ОС: linux 2.6

Re: shell + команда test

Сообщение _beast »

Немного вдумавшись в написаное я понял это так: Как в строке узнать число стоящее до символа G?? так я понял??

Код: Выделить всё

zombie@localhost:~/tmp/john-1.7.2/run$ echo '2211Gffr' | sed -r 's/[a-zA-Z]*//g' -
2211


может конечно я не так все понял...тогда задай вопрос нормально.
Спасибо сказали:
ultros
Сообщения: 24
ОС: Linux

Re: shell + команда test

Сообщение ultros »

Пардон.
[ 11G = G$ ] или test 11G = G$
echo $?
1
Указываю равенство G11 должен быть равен G$ так как символ ($) в конце символа (G) означает конец слова оканчивающегося на (G)
Пример:
grep "G$" файл
файл1G
файл2G
файл3G
и.т.д.
Тут видно что grep нашла все файлы оканчивающиеся на (G)
А с командой test выдает отрицательное значение. типо нет совпадений(((.
Вопрос. Как мне указать что подходит любое значение лижбы оно заканчиволось буквой (G) ?
Спасибо сказали:
_beast
Сообщения: 77
ОС: linux 2.6

Re: shell + команда test

Сообщение _beast »

лови.

Код: Выделить всё

#!/bin/bash
if echo "11G1" | grep -q 'G$'
then
        echo "Match"
else
        echo "Not Match"
fi


команда test не использует регулярные выражения поэтому у тебя и работает не правильно. Приходиться использовать сторонние утилиты.
Спасибо сказали:
ultros
Сообщения: 24
ОС: Linux

Re: shell + команда test

Сообщение ultros »

Спасибо.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: shell + команда test

Сообщение diesel »

вот так можно, в bash:

Код: Выделить всё

diesel@beezir:~$ i="asdfGf"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
diesel@beezir:~$ i="asdfG"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
OK
Спасибо сказали:
_beast
Сообщения: 77
ОС: linux 2.6

Re: shell + команда test

Сообщение _beast »

diesel писал(а):
07.02.2008 11:29
вот так можно, в bash:

Код: Выделить всё

diesel@beezir:~$ i="asdfGf"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
diesel@beezir:~$ i="asdfG"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
OK


а что =~ позволяет использовать полноценные регулярные выражения в bash'е??? гм. не знал. буду иметь ввиду.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5399
ОС: Gentoo

Re: shell + команда test

Сообщение /dev/random »

diesel писал(а):
07.02.2008 11:29
вот так можно, в bash:

Код: Выделить всё

diesel@beezir:~$ i="asdfGf"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
diesel@beezir:~$ i="asdfG"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
OK

У меня не работает. Ищет правое в левом не как регулярное выражение, а как подстроку.

Код: Выделить всё

>=<random@localhost>=[20:00]=<&0>=<?0>=<
[5:/home/random]
$ [[ 'qwer' =~ 'wer' ]] && echo OK
OK

>=<random@localhost>=[20:00]=<&0>=<?0>=<
[5:/home/random]
$ [[ 'qwer' =~ 'wer$' ]] && echo OK

>=<random@localhost>=[20:00]=<&0>=<?1>=<
[5:/home/random]
$ [[ 'qwer$' =~ 'wer$' ]] && echo OK
OK

>=<random@localhost>=[20:01]=<&0>=<?0>=<
[5:/home/random]
$ bash --version
GNU bash, version 3.2.17(1)-release (i686-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

Хотя в man bash написано, что должно работать.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: shell + команда test

Сообщение diesel »

Возможно у Вас bash собран как-то не так, мало верится что в более новой версии это выкинули?

Код: Выделить всё

diesel@beezir:~$ [[ 'qwer$' =~ 'wer$' ]] && echo OK
diesel@beezir:~$ bash --version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
diesel@beezir:~$ [[ 'qwer' =~ 'wer' ]] && echo OK
OK
diesel@beezir:~$ [[ 'qwer' =~ 'wer$' ]] && echo OK
OK
diesel@beezir:~$ [[ 'qwer$' =~ 'wer$' ]] && echo OK
diesel@beezir:~$ bash --version
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
diesel@beezir:~$
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: shell + команда test

Сообщение Folderx »

ultros писал(а):
06.02.2008 17:21
Привет.
Пример:
[ 11G = G$ ] или test 11G = G$
echo $?
1
Подскажите как можно указать "любое значение стоящее до символа G" ?


Всё проще :)

[[ 11G = *G ]]
Спасибо сказали: