Puede usar perl one-liners como lo hace con sed, con la ventaja de una expresión regular perl completa soporte (que es mucho más poderoso que lo que obtiene con sed). También hay muy poca variación en las plataformas * nix: perl es generalmente perl. Por lo tanto, puede dejar de preocuparse por cómo hacer que la versión particular de sed de su sistema haga lo que desea.
En este caso, puedes hacer
perl -pe 's/(regex)/\n$1/'
-pe
pone a Perl en un bucle de "ejecutar e imprimir", muy parecido al modo de operación normal de sed.
'
cita todo lo demás para que el caparazón no interfiera
()
Alrededor de la expresión regular hay un operador de agrupación. $1
en el lado derecho de la sustitución imprime lo que coincida dentro de estos parens.
Finalmente, \n
es una nueva línea.
Independientemente de si está utilizando paréntesis como operador de agrupación, debe escapar de cualquier paréntesis que intente hacer coincidir. Entonces, una expresión regular para que coincida con el patrón que enumeras arriba sería algo así como
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
o \)
coincide con un par literal, y \d
coincide con un dígito.
Mejor:
\(\d{3}\)\d{3}-\d{4}
Me imagino que puedes descubrir qué están haciendo los números entre llaves.
Además, puede usar delimitadores que no sean / para su expresión regular. Entonces, si necesitas unir / no tendrás que escapar. Cualquiera de los siguientes es equivalente a la expresión regular al comienzo de mi respuesta. En teoría, puede sustituir cualquier carácter por el estándar / 's.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Un par de pensamientos finales.
usar en -ne
lugar de -pe
actuar de manera similar, pero no se imprime automáticamente al final. Puede ser útil si desea imprimir por su cuenta. Por ejemplo, aquí hay un grep-like ( m/foobar/
es una coincidencia de expresiones regulares):
perl -ne 'if (m/foobar/) {print}'
Si le resulta problemático lidiar con las nuevas líneas y desea que se maneje mágicamente por usted, agregue -l
. Sin embargo, no fue útil para el OP, que estaba trabajando con nuevas líneas.
Sugerencia adicional: si tiene instalado el paquete pcre, viene con él pcregrep
, que utiliza expresiones regulares compatibles con perl.
sed '/regex/G'