shell + команда test (не работают метасимволы)
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 24
- ОС: Linux
shell + команда test
Привет.
Пример:
[ 11G = G$ ] или test 11G = G$
echo $?
1
Подскажите как можно указать "любое значение стоящее до символа G" ?
Пример:
[ 11G = G$ ] или test 11G = G$
echo $?
1
Подскажите как можно указать "любое значение стоящее до символа G" ?
-
- Сообщения: 77
- ОС: linux 2.6
Re: shell + команда test
Что то я не совсем понял вопрос. Можно задать вопрос еще раз только русским языком?
-
- Сообщения: 88
- ОС: Gentoo Linux
Re: shell + команда test
Я что-то тоже ничего не понял. Кстати, не G$, а $G.
-
- Сообщения: 77
- ОС: linux 2.6
Re: shell + команда test
Немного вдумавшись в написаное я понял это так: Как в строке узнать число стоящее до символа G?? так я понял??
может конечно я не так все понял...тогда задай вопрос нормально.
Код: Выделить всё
zombie@localhost:~/tmp/john-1.7.2/run$ echo '2211Gffr' | sed -r 's/[a-zA-Z]*//g' -
2211
может конечно я не так все понял...тогда задай вопрос нормально.
-
- Сообщения: 24
- ОС: Linux
Re: shell + команда test
Пардон.
[ 11G = G$ ] или test 11G = G$
echo $?
1
Указываю равенство G11 должен быть равен G$ так как символ ($) в конце символа (G) означает конец слова оканчивающегося на (G)
Пример:
grep "G$" файл
файл1G
файл2G
файл3G
и.т.д.
Тут видно что grep нашла все файлы оканчивающиеся на (G)
А с командой test выдает отрицательное значение. типо нет совпадений(((.
Вопрос. Как мне указать что подходит любое значение лижбы оно заканчиволось буквой (G) ?
[ 11G = G$ ] или test 11G = G$
echo $?
1
Указываю равенство G11 должен быть равен G$ так как символ ($) в конце символа (G) означает конец слова оканчивающегося на (G)
Пример:
grep "G$" файл
файл1G
файл2G
файл3G
и.т.д.
Тут видно что grep нашла все файлы оканчивающиеся на (G)
А с командой test выдает отрицательное значение. типо нет совпадений(((.
Вопрос. Как мне указать что подходит любое значение лижбы оно заканчиволось буквой (G) ?
-
- Сообщения: 77
- ОС: linux 2.6
Re: shell + команда test
лови.
команда test не использует регулярные выражения поэтому у тебя и работает не правильно. Приходиться использовать сторонние утилиты.
Код: Выделить всё
#!/bin/bash
if echo "11G1" | grep -q 'G$'
then
echo "Match"
else
echo "Not Match"
fi
команда test не использует регулярные выражения поэтому у тебя и работает не правильно. Приходиться использовать сторонние утилиты.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: shell + команда test
вот так можно, в bash:
Код: Выделить всё
diesel@beezir:~$ i="asdfGf"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
diesel@beezir:~$ i="asdfG"; if [[ $i =~ "G$" ]]; then echo "OK"; fi
OK
-
- Сообщения: 77
- ОС: linux 2.6
Re: shell + команда test
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'е??? гм. не знал. буду иметь ввиду.
-
- Администратор
- Сообщения: 5399
- ОС: Gentoo
Re: shell + команда test
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 написано, что должно работать.
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: shell + команда test
Возможно у Вас 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:~$
-
- Сообщения: 296
- ОС: fedora, mandriva