Você pode usar one-liners perl da mesma forma que o sed, com a vantagem da expressão regular completa do perl suporte (que é muito mais poderoso do que o obtido com o sed). Também há muito pouca variação entre as plataformas * nix - o perl geralmente é o perl. Portanto, você pode parar de se preocupar em como fazer com que a versão do sed do seu sistema específico faça o que você deseja.
Nesse caso, você pode fazer
perl -pe 's/(regex)/\n$1/'
-pe
coloca o perl em um loop "execute and print", bem como o modo normal de operação do sed.
'
cita todo o resto para que o shell não interfira
()
ao redor do regex é um operador de agrupamento. $1
no lado direito da substituição, imprime o que foi encontrado dentro desses parênteses.
Finalmente, \n
é uma nova linha.
Independentemente de você estar usando parênteses como um operador de agrupamento, você precisa escapar dos parênteses que está tentando corresponder. Portanto, uma regex para corresponder ao padrão listado acima seria algo como
\(\d\d\d\)\d\d\d-\d\d\d\d
\(
ou \)
corresponde a um paren literal e \d
corresponde a um dígito.
Melhor:
\(\d{3}\)\d{3}-\d{4}
Eu imagino que você possa descobrir o que os números nos aparelhos estão fazendo.
Além disso, você pode usar delimitadores diferentes de / para seu regex. Portanto, se você precisar corresponder / não precisará escapar dela. Qualquer uma das opções abaixo é equivalente à regex no início da minha resposta. Em teoria, você pode substituir qualquer caractere pelos padrões.
perl -pe 's#(regex)#\n$1#'
perl -pe 's{(regex)}{\n$1}'
Algumas considerações finais.
usando em -ne
vez de -pe
agir da mesma forma, mas não é impresso automaticamente no final. Pode ser útil se você quiser imprimir sozinho. Por exemplo, aqui está um grep-alike ( m/foobar/
é uma correspondência de regex):
perl -ne 'if (m/foobar/) {print}'
Se você acha que lidar com novas linhas é problemático e deseja que ele seja tratado magicamente por você, adicione -l
. Não é útil para o OP, que estava trabalhando com novas linhas, no entanto.
Dica de bônus - se você tiver o pacote pcre instalado, ele vem com ele pcregrep
, que usa expressões regulares compatíveis com perl.
sed '/regex/G'