67

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

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

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

3 ответа3

98

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

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

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

61

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

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

  2. + должен иметь обратную косую черту, чтобы получить особое значение: \+ .

3

Справочная страница sed ссылается на справочную страницу re_format. Это делает 2 различия: (1) устаревшие и расширенные регулярные выражения; (2) неосуществленные и расширенные регулярные выражения. Все 4 комбинации возможны. В sed есть поддержка как устаревшего, так и расширенного, но в любом случае только для не улучшенного. Оператор \d является функцией расширенных регулярных выражений, поэтому не поддерживается sed.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .