LINUX.ORG.RU

sed, \d, PCRE и поиск цифр

 , , ,


0

1

Я что-то не пойму: sed до сих пор не умеет работать со стандартом PCRE?

Опция "-r" (она же "-E") включает расширенные регвыры, но это не подмножество PCRE? В мануале написано «use extended regular expressions in the script», но не написано что подразумевается под этим extended.

Спрашиваю потому, что не могу через «\d» найти цифру даже если включить опцию -r/-E.

★★★★★
Ответ на: комментарий от gnu_linux

Строка

host    all             all             127.0.0.1/32            md5


Код для замены строки
regExp='^host\s*all\s*all\s*\d+\.\d+\.\d+\.\d+\/\d+\s*md5'
line='host    all             all             0.0.0.0/0            md5'                                                             
cmd="sed -r 's|$regExp|$line|' $fileName > /tmp/sed.txt"                                                                            
echo "$cmd" | bash


И он не работает. А если вместо «\d» писать «[0-9]», то работает.

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

sed 's/[[:digit:]]\+/тут было число/'

Вместо \d писать [[:digit:]]? Двадцать первый век на дворе.

Вопрос на самом деле был про стандарты. Что имеется в иду под extended - непонятно. Документация на sed, одну из главных программ, работающих с регвырами, полный шлак, и всем плевать на протяжении десятилетий.

Xintrea ★★★★★
() автор топика

sed до сих пор не умеет работать со стандартом PCRE?

А должен?

Он должен соответствует IEEE 1003.2 (POSIX.2), остальное — шашечки.

Опция «-r» (она же «-E») включает расширенные регвыры, но это не подмножество PCRE?

PCRE и Extended REs — это разные вещи.

mord0d ★★★★★
()

но не написано что подразумевается под этим extended.

Потому что это написано в regex(7), непонятно правда, почему sed(1) на него не ссылается (grep(1) от GNU grep ссылается, хотя сам содержит его пересказ).

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

Что имеется в иду под extended - непонятно.

info sed

в частности

info sed -n Character Classes

PCRE

PCRE - Perl Compatible Regular Expressions

Решение простое - используй perl.

anonymous
()
Ответ на: комментарий от ABW
man sed

       The full documentation for sed is maintained as a Texinfo manual.  If the
       info and sed programs are properly installed at your site, the command

              info sed
anonymous
()
Ответ на: комментарий от anonymous

info sed

Наконец нашел про extended. Различий от дефолта немного:

5.4 Overview of extended regular expression syntax
==================================================

The only difference between basic and extended regular expressions is in
the behavior of a few characters: '?', '+', parentheses, braces ('{}'),
and '|'.  While basic regular expressions require these to be escaped if
you want them to behave as special characters, when using extended
regular expressions you must escape them if you want them _to match a
literal character_.  '|' is special here because '\|' is a GNU extension
- standard basic regular expressions do not provide its functionality.

Examples:
'abc?'
     becomes 'abc\?' when using extended regular expressions.  It
     matches the literal string 'abc?'.

'c\+'
     becomes 'c+' when using extended regular expressions.  It matches
     one or more 'c's.

'a\{3,\}'
     becomes 'a{3,}' when using extended regular expressions.  It
     matches three or more 'a's.

'\(abc\)\{2,3\}'
     becomes '(abc){2,3}' when using extended regular expressions.  It
     matches either 'abcabc' or 'abcabcabc'.

'\(abc*\)\1'
     becomes '(abc*)\1' when using extended regular expressions.
     Backreferences must still be escaped when using extended regular
     expressions.

'a\|b'
     becomes 'a|b' when using extended regular expressions.  It matches
     'a' or 'b'.

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

Решение простое - используй perl

Для использования стандарта на регвыры PCRE осталось еще и Perl выучить.

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

Для использования стандарта на регвыры PCRE

Где в документации sed написано, что используется pcre?

Если очень хочется «sed c pcre», то вызывай perl -pe 's/\d+/число/'

anonymous
()
Ответ на: комментарий от Xintrea

стандарта на регвыры PCRE

А gcc это стандарт на язык С++?

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