bash, сравнение строк

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

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

Vuyko
Сообщения: 11
ОС: Ubuntu

bash, сравнение строк

Сообщение Vuyko »

Такой вопрос:
как сравнить 2 строки case insensitive?
Спасибо сказали:
Аватара пользователя
Poor Fred
Сообщения: 1575
Статус: Pygoscelis papua
ОС: Gentoo Linux, FreeBSD

Re: bash, сравнение строк

Сообщение Poor Fred »

Vuyko писал(а):
10.06.2009 14:49
Такой вопрос:
как сравнить 2 строки case insensitive?

man test
Убить всех человеков!
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: bash, сравнение строк

Сообщение pcodr »

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

shopt -s nocasematch
[[ "Sa" = "sA" ]] && echo "ok"
remote system type is unix
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: bash, сравнение строк

Сообщение drBatty »

Vuyko писал(а):
10.06.2009 14:49
как сравнить 2 строки case insensitive?

кроме test (ака [[]]), есть ещё множество красивых решений. Зависит от задачи.
(ну все уже поняли, к чему я склоняю ;) )

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

$

echo '"Sa"="sA"' | sed -rn 's/"([^"]*)"="\1"/It`s OK/ip' It`s OK

Примечание: это всё конечно хорошо, но придётся изучить sed.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Vuyko
Сообщения: 11
ОС: Ubuntu

Re: bash, сравнение строк

Сообщение Vuyko »

Спасибо, я написал с использованием [[]]
Спасибо сказали:
Vuyko
Сообщения: 11
ОС: Ubuntu

Re: bash, сравнение строк

Сообщение Vuyko »

Еще вопрос в догонку. Есть файл, в нём есть часть данных, ограничена маркерами. Как мне считать ту часть, которая находится между маркерами?
Спасибо сказали:
Аватара пользователя
Reboot
Сообщения: 321
Статус: Красен глаз -- темна душа

Re: bash, сравнение строк

Сообщение Reboot »

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

cut -d "маркер"  -f 2 "имя файла"

как мне кажется, должно сработать
Мой компьютер зовут Марвин
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: bash, сравнение строк

Сообщение allez »

Vuyko писал(а):
10.06.2009 17:08
Еще вопрос в догонку. Есть файл, в нём есть часть данных, ограничена маркерами. Как мне считать ту часть, которая находится между маркерами?

Читайте man awk, однако. Можно также man cut почитать. А вообще на данном форуме принято такое правило: одна тема - один вопрос.
Спасибо сказали:
Vuyko
Сообщения: 11
ОС: Ubuntu

Re: bash, сравнение строк

Сообщение Vuyko »

Reboot писал(а):
10.06.2009 17:14

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

cut -d "маркер"  -f 2 "имя файла"

как мне кажется, должно сработать

Не, так не получится. Говорит что маркер должен быть одним символом, кроме того у меня 2 маркера: префикс и суффикс.

Относительно создания новой темы - учту в следующий раз.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: bash, сравнение строк

Сообщение allez »

Vuyko писал(а):
10.06.2009 17:24
Не, так не получится. Говорит что маркер должен быть одним символом, кроме того у меня 2 маркера: префикс и суффикс.

allez писал(а):
10.06.2009 17:15
Читайте man awk, однако.

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

cat file | awk -F 'suffix' '{print $1}' | awk -F 'prefix' '{print $2}'
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: bash, сравнение строк

Сообщение drBatty »

Vuyko писал(а):
10.06.2009 17:08
Еще вопрос в догонку. Есть файл, в нём есть часть данных, ограничена маркерами. Как мне считать ту часть, которая находится между маркерами?

маркёры оба в одной строке?
или один в одной, другой в другой?
или и так и так?
sed -rn '/mark1/,/mark2/p' это если маркёры в разных строках.
sed -rn 's/.*mark1//;T;s/mark2.*//p' это если в одной.

allez писал(а):
10.06.2009 17:26
cat file | awk -F 'suffix' '{print $1}' | awk -F 'prefix' '{print $2}'

ну можно и так...


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: а вот жадный разбор в случае если маркёры в разных строках намного интереснее :)
тоже можно. и часто даже нужно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: