Вы можете использовать perl one-liners так же, как и с sed, с преимуществом полной поддержки регулярных выражений perl (что гораздо мощнее, чем то, что вы получаете с sed). На * nix платформах также очень мало изменений - perl обычно perl. Таким образом, вы можете перестать беспокоиться о том, как заставить версию вашей конкретной системы sed делать то, что вы хотите.
В этом случае вы можете сделать
perl -pe 's/(regex)/\n$1/'
-pe
помещает perl в цикл «выполнить и напечатать», очень похожий на обычный режим работы sed.
'
цитирует все остальное, чтобы оболочка не мешала
()
окружающее регулярное выражение является оператором группировки. $1
на правой стороне замены печатает то, что было найдено в этих скобках.
Наконец, \n
это новая строка.
Независимо от того, используете ли вы скобки в качестве оператора группировки, вы должны избегать любых скобок, которые вы пытаетесь сопоставить. Таким образом, регулярное выражение в соответствии с шаблоном, который вы перечислили выше, будет что-то вроде
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
или \)
соответствует буквальному пареню и \d
соответствует цифре.
Лучше:
\(\d{3}\)\d{3}-\d{4}
Я полагаю, вы можете выяснить, что делают числа в фигурных скобках.
Кроме того, вы можете использовать разделители, отличные от / для вашего регулярного выражения. Так что если вам нужно соответствовать / вам не нужно избегать его. Любое из нижеприведенного равнозначно регулярному выражению в начале моего ответа. Теоретически вы можете заменить любой символ на стандартное.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Пара заключительных мыслей.
использование -ne
вместо -pe
действует аналогично, но в конце автоматически не печатается. Это может быть удобно, если вы хотите печатать самостоятельно. Например, вот что такое grep ( m/foobar/
как регулярное выражение):
perl -ne 'if (m/foobar/) {print}'
Если вам трудно работать с новыми строками, и вы хотите, чтобы это было волшебным образом для вас, добавьте -l
. Не полезно для ОП, который работал с новыми строками.
Дополнительный совет - если у вас установлен пакет pcre, он поставляется вместе с pcregrep
регулярными регулярными выражениями, совместимыми с perl.
sed '/regex/G'