Возможно ли получить доступ к символу после совпавшей позиции (&) в sed? - PullRequest
1 голос
/ 30 мая 2019

У меня есть текст вроде:

... - hi- 12-

Мой желаемый вывод - пробел между буквенно-цифровыми значениями, которые заканчиваются на -:

... - hi - 12 -

обратите внимание, что первый дефис остался на месте, так как ему предшествует пробел, а не алфавитный.

также не следует изменять такие слова, как multi-line.

вот что я использую :

echo " - hi- 12-" | sed -E 's/[[:alnum:]]-($|[^[:alnum:]])/ &/g'

который выводит:

" - h i- 1 2-"

есть ли способ использовать &+1 позицию?

1 Ответ

1 голос
/ 30 мая 2019

Вы можете использовать

sed -E 's/([[:alnum:]])-($|[^[:alnum:]])/\1 -\2/g' <<< " - hi- 12-"
#         ^-- Group1--^ ^-- Group 2 ---^

См. онлайн-демонстрацию

Подробнее

  • ([[:alnum:]])- Группа захвата # 1: буквенно-цифровой символ
  • - - дефис
  • ($|[^[:alnum:]]) - Группа захвата # 2: конец строки или любой символ, кроме буквенно-цифрового.

В RHS (шаблон замены) заполнители \1 и \2 (или числовые обратные ссылки) относятся к тексту, захваченному соответствующими группами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...