Вы можете использовать Perl остротами так же, как вы делаете с СЕПГ, с преимуществом полная поддержка perl regular expression (что намного мощнее, чем то, что вы получаете с sed).Существует также очень мало различий между платформами * nix - perl, как правило, perl. Таким образом, вы можете перестать беспокоиться о том, как сделать версию вашей конкретной системы sed необходимой для вас.
В этом случае, вы можете сделать
perl -pe 's/(regex)/\n$1/'
-pe
ставит Perl в «выполнить и печать» цикла, так же, как СЕПГ нормальный режим работы.
'
цитирует все остальное, так что оболочка не будет мешать
()
окружающих регулярное выражение является оператором группировки. $1
с правой стороны замены выдает все, что соответствовало этим парам.
И, наконец, \n
- это символ новой строки.
Независимо от того, используете ли вы круглые скобки в качестве оператора группировки, вам нужно избежать любых круглых скобок, которые вы пытаетесь сопоставить. Таким образом, регулярное выражение, чтобы соответствовать выбранному шаблону список выше будет чем-то вроде
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
или \)
буквальной скобки и \d
соответствует цифре.
Лучше:
\(\d{3}\)\d{3}-\d{4}
Я полагаю, вы можете выяснить, какие числа в скобках делают.
Кроме того, вы можете использовать разделители, отличные от/для вашего регулярного выражения. Поэтому, если вам нужно совпадение, вам не нужно будет его избегать. Любой из приведенных ниже эквивалентен регулярному выражению в начале моего ответа. Теоретически вы можете заменить any character на стандарт/'s.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Дополнительный совет - если у вас установлен пакет PCRE, он приходит с pcregrep
, который использует полный перл-совместимых регулярных выражений.
Это плохой вопрос (ответ «просто переключить порядок»), но случайно вызвал хорошее обсуждение новых строк в sed! –
@NilsvonBarth вопрос намного более общий и сложный, чем кажется на первый взгляд. Ответ в некоторых случаях не так прост, как переключение порядка, как вы можете видеть из многих ответов. – Dennis
Нет, буквальный вопрос прост: вы спрашиваете: «sed 's/regexp/& \ n/g' вставляет новую строку за шаблоном регулярного выражения. Как я могу сделать то же самое, но перед шаблоном? " , на который ответ, который вы даете себе, является «переключить заказ». Если & \ n работает для after, тогда \ n & работает раньше. * Общий * вопрос о том, как обращаться с новыми строками в sed, сложный и хороший, но * конкретный * вопрос прост и плох. –