Это если вы хотите ноль или более цифр. /[[:digit:]]*\. /будет соответствовать строке, foo.потому что вы допускаете ноль цифр. Если вы хотите использовать один или несколько, \+как показано на рисунке
Гленн Джекман
71
Две проблемы:
sedне поддерживает \d. Используйте [0-9]или [[:digit:]].
+должно получить управляющие последовательностями особого значения: \+.
вместо обратной косой черты + (которая не работает, например, в Mac OS X) вы можете использовать опцию -E, к interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).сожалению, это не поможет с проблемой \ d ...
gMale
4
@gmale: -Eне работает для GNU sed, -rвместо этого он использует .
Чороба
12
Ладно ... это выглядит sedпросто отстойно, когда дело доходит до переносимости ...
иконоборчество
@choroba Я думаю, что я запутался сегодня. Я собираюсь удалить мои шумные комментарии ...
Стивен Лу
По сути, я пытался предупредить людей о том, что: если вы не используете расширенное регулярное выражение ( -Eв sed BSD и -rв GNU sed), то в BSD sed ни то, +ни другое \+(то же самое с ?) не будет работать вообще, тогда как в GNU sed вы можете это сделать. заставить их работать с обратной косой чертой. Отсюда общая рекомендация использовать расширенное регулярное выражение в сценариях
Стивен Лу
3
Справочная страница sed ссылается на справочную страницу re_format. Это делает 2 различия: (1) устаревшие и расширенные регулярные выражения; (2) регулярные выражения без улучшений по сравнению с расширенными. Все 4 комбинации возможны. В sed есть поддержка как устаревшего, так и расширенного, но в любом случае только для не улучшенного. Оператор \ d является функцией расширенных регулярных выражений, поэтому не поддерживается sed.
Ответы:
Поскольку sed не является perl-regexed, у него нет
\d
сокращения:Документация по регулярным выражениям здесь .
источник
/[[:digit:]]*\. /
будет соответствовать строке,foo.
потому что вы допускаете ноль цифр. Если вы хотите использовать один или несколько,\+
как показано на рисункеДве проблемы:
sed
не поддерживает\d
. Используйте[0-9]
или[[:digit:]]
.+
должно получить управляющие последовательностями особого значения:\+
.источник
interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).
сожалению, это не поможет с проблемой \ d ...-E
не работает для GNU sed,-r
вместо этого он использует .sed
просто отстойно, когда дело доходит до переносимости ...-E
в sed BSD и-r
в GNU sed), то в BSD sed ни то,+
ни другое\+
(то же самое с?
) не будет работать вообще, тогда как в GNU sed вы можете это сделать. заставить их работать с обратной косой чертой. Отсюда общая рекомендация использовать расширенное регулярное выражение в сценарияхСправочная страница sed ссылается на справочную страницу re_format. Это делает 2 различия: (1) устаревшие и расширенные регулярные выражения; (2) регулярные выражения без улучшений по сравнению с расширенными. Все 4 комбинации возможны. В sed есть поддержка как устаревшего, так и расширенного, но в любом случае только для не улучшенного. Оператор \ d является функцией расширенных регулярных выражений, поэтому не поддерживается sed.
источник