Решено: Подскажите в regexp

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

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

Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Решено: Подскажите в regexp

Сообщение newsrc »

Есть список:

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

contora
contora-mail:2222
dom
office
Здесь имя хоста и порт ssh

Нужно выбрать исключительно одну строку.

$list_hosts -- файл со списком
Делаю так -- получаю обе строчки:

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

cat $list_hosts | grep '^contora' | awk -F: '{print $1}'


Делаю так -- получаю первую строку:

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

cat $list_hosts | grep '^contora$' | awk -F: '{print $1}'


А если у меня будет

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

contora:22
в списке, то второе выражение, естественно, не подходит.

Это не правильно, я знаю:

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

cat $list_hosts | grep '^contora[:$]' | awk -F: '{print $1}'


Т.е. нужно предусмотреть возможность наличия после имени хоста "конца строки" или "двоеточие, цифры, конец строки"

P.S. Если везде я заменяю символ конца строки на, скажем, ";", то всё получается. Вопрос видимо в корректном обозначении конца строки.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5404
ОС: Gentoo

Re: Решено: Подскажите в regexp

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

Не очень портируемо, но в gnu coreutils работает:

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

grep '^foobar\(:.*\)\?$'
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: Подскажите в regexp

Сообщение NickLion »

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

egrep '^contora($|:)'

не? или не понял?
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Подскажите в regexp

Сообщение newsrc »

Спасибо обоим. И то и другое работает.
Насчёт портируемости: это всё на linux'ах, coreutils на всех машинах есть.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали: