Как убрать из строки подряд идущие повторы символа | - вертикальная черта
На входе строка:
"J3E||F3E|R3E|||H3E"
На на выходе без повторов символа "|":
"J3E|F3E|R3E|H3E"
В принципе вот так работает:
echo "J3E||F3E|R3E|||H3E" | sed 's/[\|][\|]*/|/g'
Но, если я хочу заменить Только от трех и более подряд идущих символов "|||...", например так:
echo "J3E||F3E|R3E|||H3E" | sed 's/[\|]{3,}/|/g'
Ничего не получается. Как правильно использовать квантификаторы "фигурные скобки" для данной задачи?
Ответы (2 шт):
Автор решения: Vladimir Logvinov
→ Ссылка
Замена от 2 символов и больше
import re
result = re.sub(r"\|{2,}", '|', 'J3E||F3E|R3E|||H3E')
print(result)
Автор решения: Wiktor Stribiżew
→ Ссылка
Используйте следующий шаблон POSIX BRE:
echo "J3E||F3E|R3E|||H3E" | sed 's/|\{3,\}/|/g'
Чтобы не нужно было экранировать фигурные скобки, используйте -E (POSIX ERE):
echo "J3E||F3E|R3E|||H3E" | sed -E 's/\|{3,}/|/g'
Заметьте, что в POSIX BRE символ | является обычным, а в POSIX ERE — специальным (поэтому во втором решении он экранирован).
Смотрите пример работы кода онлайн.