Puoi usare perl one-liner come fai con sed, con il vantaggio del pieno supporto dell'espressione regolare perl (che è molto più potente di quello che ottieni con sed). C'è anche una variazione molto piccola tra le piattaforme * nix - perl è generalmente perl. Quindi puoi smettere di preoccuparti di come far sì che la versione di sed del tuo sistema particolare faccia quello che vuoi.
In questo caso, puoi farlo
perl -pe 's/(regex)/\n$1/'
-pe mette il perl in un ciclo "esegui e stampa", proprio come la normale modalità operativa di sed.
' cita tutto il resto in modo che la shell non interferisca
()che circonda la regex c'è un operatore di raggruppamento. $1sul lato destro della sostituzione stampa tutto ciò che è stato abbinato all'interno di queste parentesi.
Infine, \nè una newline.
Indipendentemente dal fatto che tu stia usando le parentesi come operatore di raggruppamento, devi scappare da tutte le parentesi che stai cercando di abbinare. Quindi una regex per abbinare il modello che elenchi sopra sarebbe qualcosa di simile
\(\d\d\d\)\d\d\d-\d\d\d\d
\(o \)corrisponde a un valore letterale e \dcorrisponde a una cifra.
Meglio:
\(\d{3}\)\d{3}-\d{4}
Immagino che tu possa capire cosa stanno facendo i numeri tra parentesi graffe.
Inoltre, è possibile utilizzare delimitatori diversi da / per regex. Quindi, se devi abbinare / non dovrai scappare. Uno dei seguenti è equivalente alla regex all'inizio della mia risposta. In teoria puoi sostituire qualsiasi carattere con lo / gli standard.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Un paio di pensieri finali.
usando -neinvece di -peatti allo stesso modo, ma non stampa automaticamente alla fine. Può essere utile se si desidera stampare da soli. Ad esempio, ecco un grep-alike ( m/foobar/è una partita regex):
perl -ne 'if (m/foobar/) {print}'
Se stai riscontrando problemi con le newline e vuoi che sia gestito magicamente per te, aggiungi -l. Non utile per l'OP, che stava lavorando con le nuove linee.
Suggerimento bonus: se hai installato il pacchetto pcre, viene fornito con pcregrepregex completamente compatibili perl.
sed '/regex/G'