Как сопоставить цифры, сопровождаемые точкой, используя sed?

77

Я пытаюсь использовать sedдля замены всех шаблонов цифрами, за которыми сразу следует точка (например 3., 355.) пустой строкой. Итак, я стараюсь:

sed 's/\d+\.//g' file.txt

Но это не работает. Почему это?

Мика Х.
источник
1
Я нашел эту статью очень полезной
Stphane

Ответы:

112

Поскольку sed не является perl-regexed, у него нет \dсокращения:

sed 's/[[:digit:]]\+\.//g'

Документация по регулярным выражениям здесь .

Гленн Джекман
источник
3
Это если вы хотите ноль или более цифр. /[[:digit:]]*\. /будет соответствовать строке, foo.потому что вы допускаете ноль цифр. Если вы хотите использовать один или несколько, \+как показано на рисунке
Гленн Джекман
71

Две проблемы:

  1. sedне поддерживает \d. Используйте [0-9]или [[:digit:]].

  2. +должно получить управляющие последовательностями особого значения: \+.

choroba
источник
6
вместо обратной косой черты + (которая не работает, например, в 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.

Джонатан Пул
источник