регулярное выражение в седе - PullRequest
10 голосов
/ 24 октября 2008

Мне нужно использовать sed для преобразования всех вхождений ## XXX ## в $ {XXX}. X может быть любым буквенным символом или '_'. Я знаю, что мне нужно использовать что-то вроде:

's/##/\${/g'

Но, конечно, это не будет правильно, так как конвертирует ## FOO ## в $ {FOO $ {

Любой берущий? - Дон

Ответы [ 7 ]

12 голосов
/ 24 октября 2008

Вот пример лучшего регулярного выражения замены:

's/##\([a-zA-Z_]\+\)##/${\1}/g'

Или, если вы предполагаете ровно три символа:

's/##\([a-zA-Z_]\{3\}\)##/${\1}/g'
2 голосов
/ 24 октября 2008
  • Инкапсулируйте альфа и '_' в пределах '\ (' и '\)', а затем в правой части ссылки, что с '\ 1'.
  • '+' для соответствия одной или нескольким альфа и '_' (если вы видите ####).
  • Добавьте опцию 'g' в конец, чтобы заменить все совпадения (что, я полагаю, именно то, что вы хотите сделать в этом случае).
's/##\([a-zA-Z_]\+\)##/${\1}/g'
1 голос
/ 14 октября 2014
echo "##foo##" | sed 's/##/${/;s//}/'
  • s изменить только 1 случай по умолчанию
  • s// взять последний использованный шаблон поиска, поэтому вторые s берут также ## и все еще существует только второе вхождение
1 голос
/ 24 октября 2008
sed 's/##\([a-zA-Z_][a-zA-Z_][a-zA-Z_]\)##/${\1}/'

\(...\) запоминает ... и упоминается как \1 в расширении. Используйте одинарные кавычки, чтобы сохранить здравомыслие.

Как отмечено в комментариях ниже, это также может быть сокращено до:

sed 's/##\([a-zA-Z_]\{3\}\)##/${\1}/'

В этом ответе предполагается, что в примере требуется совпадение ровно трех символов. Есть несколько вариантов в зависимости от того, что находится между хеш-метками. Ключевой частью является запоминание части совпадающей строки.

1 голос
/ 24 октября 2008

Используйте это:

s/##\([^#]*\)##/${\1}/

Кстати, нет необходимости экранировать $ в правой части оператора "s".

0 голосов
/ 27 сентября 2012

sed 's / ([^ a-z] [^ A-Z] [^ 0-9] *) / (&) / pg

0 голосов
/ 17 марта 2009

echo '## XXX ##' | sed "s / ^ ## ([^ #] *) / ## $ {\ 1} / g"

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