Я не очень хорошо разбираюсь в regex и не могу понять, почему он выбирает следующий символ после -

/[\-][^ - ]/g

с этим он выбирает - и следующий символ.

Я хочу выбрать тире между двумя числами, но не хочу выбирать тире с пробелом до и после.

на самом деле я пытаюсь использовать это в Ubuntu для рекурсивного переименования каталогов с именем

#### - ##-##

в

#### - ##:## 

1 ответ1

0

Обычно можно преобразовать шаблоны таким образом, привязав черту к цифрам, которые ее окружают, например,

foo="123 - 456-78"
bar=$(echo "$foo" | sed -r -e 's,([[:digit:]])-([[:digit:]]),\1:\2,')

То есть сопоставление цифры на каждой стороне и использование обратной ссылки для возврата цифр.

На самом деле sed не является хорошим примером, поскольку это (как и bash) использование ERE (расширенных регулярных выражений), а не стандартное. Однако, поскольку это для Ubuntu, мы можем предположить, что вы используете GNU sed, у которого есть опция -r для указания ERE.

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