Ви можете використовувати perl-вкладиші так, як ви робите з sed, з перевагою повної підтримки регулярного вираження perl (що набагато потужніше, ніж те, що ви отримуєте з sed). Існує також дуже мало варіацій для * nix платформ - perl, як правило, perl. Таким чином, ви можете перестати турбуватися про те, як змусити версію вашої конкретної системи sed робити те, що ви хочете.
У цьому випадку можна зробити
perl -pe 's/(regex)/\n$1/'
-pe
додає perl у цикл "Execute and print", як звичайний режим роботи 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
дії аналогічно, але не друкується автоматично наприкінці. Це може бути зручно, якщо ви хочете друкувати самостійно. Наприклад, ось подібний греп ( m/foobar/
є збігом регулярних виразів):
perl -ne 'if (m/foobar/) {print}'
Якщо ви вважаєте, що справу з новинками викликає занепокоєння, і ви хочете, щоб це було магічним чином для вас, додайте -l
. Однак це не корисно для ОП, які працювали з новими лініями.
Порада про бонуси - якщо у вас встановлений пакет pcre, він постачається разом із ним pcregrep
, який використовує повні сумісні пергекси.
sed '/regex/G'