Вы можете использовать однострочники perl так же, как и с 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-совместимые регулярные выражения.
person
Dan Pritts
schedule
21.05.2014
sed '/regex/G'
- person Adam Schmideg   schedule 02.05.2019