LINUX.ORG.RU

back-reference в regexp (sed)

 , ,


0

1

Пытаюсь освоить сабж, для тестов был выбран файл /etc/services. Получилось выделить название и значение порта, не могу отделить только номер порта, вот что делаю:

~$ sed -e '/\(^$\|^#\)/d' -e 's/\([0-9]\+\)\/\(tcp\|udp\|\ddp\|sctp\)\(.*\)/\1/g' /etc/services 
tcpmux		1
echo		7
echo		7
discard		9
…
asp		27374
asp		27374
csync2		30865
dircproxy	57000
tfido		60177
fido		60179
нужно в начале добавить еще одну группу, наподобии \(\b[a-z]\) или до пробела как-то, но я не пойму как это сделать.

А sed умеет \b ?
По-моему проще взять perl.

AnDoR ★★★★★
()

sed -r '/^($|#)/d; s/([0-9]+)\/.*/\1/' /etc/services
Кажется, что-то такое.
Забей на basic-регэкспы, осиливай сразу pcre.

AnDoR ★★★★★
()
Ответ на: комментарий от beastie

Что-то здесь не так, захватывается в \1 порт/номер, а в \2 несколько портов. По одиночке получается какая-то каша.

conformist ★★★
() автор топика
Ответ на: комментарий от conformist

Добавив к sed'у опцию -r (для бзд это опция -E), ты получаешь удобоваримые extended regex вместо уродливых basic.

AnDoR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.