Такой вопрос:
как сравнить 2 строки case insensitive?
bash, сравнение строк
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 11
- ОС: Ubuntu
-
- Сообщения: 1575
- Статус: Pygoscelis papua
- ОС: Gentoo Linux, FreeBSD
Re: bash, сравнение строк
Убить всех человеков!
-
- Сообщения: 283
- ОС: Debian
Re: bash, сравнение строк
Код: Выделить всё
shopt -s nocasematch
[[ "Sa" = "sA" ]] && echo "ok"
remote system type is unix
Спасибо сказали:
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: bash, сравнение строк
кроме test (ака [[]]), есть ещё множество красивых решений. Зависит от задачи.
(ну все уже поняли, к чему я склоняю

PS: и правильно

$
echo '"Sa"="sA"' | sed -rn 's/"([^"]*)"="\1"/It`s OK/ip'
It`s OK
Примечание: это всё конечно хорошо, но придётся изучить sed.
Спасибо сказали:
-
- Сообщения: 11
- ОС: Ubuntu
-
- Сообщения: 11
- ОС: Ubuntu
Re: bash, сравнение строк
Еще вопрос в догонку. Есть файл, в нём есть часть данных, ограничена маркерами. Как мне считать ту часть, которая находится между маркерами?
-
- Сообщения: 321
- Статус: Красен глаз -- темна душа
Re: bash, сравнение строк
Код: Выделить всё
cut -d "маркер" -f 2 "имя файла"
как мне кажется, должно сработать
Мой компьютер зовут Марвин
-
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: bash, сравнение строк
-
- Сообщения: 11
- ОС: Ubuntu
Re: bash, сравнение строк
Reboot писал(а): ↑10.06.2009 17:14Код: Выделить всё
cut -d "маркер" -f 2 "имя файла"
как мне кажется, должно сработать
Не, так не получится. Говорит что маркер должен быть одним символом, кроме того у меня 2 маркера: префикс и суффикс.
Относительно создания новой темы - учту в следующий раз.
-
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: bash, сравнение строк
маркёры оба в одной строке?
или один в одной, другой в другой?
или и так и так?
sed -rn '/mark1/,/mark2/p' это если маркёры в разных строках.
sed -rn 's/.*mark1//;T;s/mark2.*//p' это если в одной.
ну можно и так...
PS:
Код: Выделить всё
sed -rn '/.*mark1/{s///;s/mark2.*//p}'
если маркёры в 1 строке, то так наверное быстрее будет.
PPS:
условие задачи не корректно. не ясно что с жадностью - выше нежадный разбор, с жадным проще
Код: Выделить всё
sed -rn '/mark1.*mark2/s/.*mark1(.*)mark2.*/\1/p'
если быстродействие не волнует, то проще
Код: Выделить всё
sed -rn 's/.*mark1(.*)mark2.*/\1/p'
PPPS: а вот жадный разбор в случае если маркёры в разных строках намного интереснее

тоже можно. и часто даже нужно.