Sed удаляет повторяющиеся символы и некоторые символы в начале / конце строки - PullRequest
2 голосов
/ 12 февраля 2010

Прошу вашей помощи с sed. Мне нужно удалить дубликаты подчеркивания и подчеркивания в начале и конце строки.

Например:

echo '[Lorem] ~ ipsum *dolor* sit metus !!!' | sed 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._()-]/_/g'

Производит: _Lorem____ipsum__dolor__sit_metus____

Но мне нужно отформатировать эту строку так: Lorem_ipsum_dolor_sit_metus

Другими словами, удалите все подчеркивания из начала и конца строки и уменьшите несколько последовательных символов подчеркивания до одного, предпочтительно с помощью других труб.

У вас есть идеи, как это сделать?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 12 февраля 2010

Просто добавьте ;s/__*/_/g;s/^_//;s/_$// сразу после g в вашей команде sed.

1 голос
/ 12 февраля 2010

Все, что вам нужно сделать, это добавить «+» после выражения в скобках, чтобы исключить многократные подчеркивания. Затем вы можете удалить начало и конец. Кроме того, как предложено ladenedge , вы можете использовать класс символов для сокращения списка.

sed 's/[^[:alnum:].()-]\+/_/g;s/^_\(.*\)_$/\1/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...