Isso fará o trabalho:
perl -pe 'BEGIN { $/ = "//" } s!(?=http://\z)!\n!' urls.txt
Ao definir $ / , alterei a definição de uma linha para que ela termine com //
em vez de uma nova linha. Isso faz com que o Perl leia um URL por vez. É improvável que um URL contenha //
, exceto após o esquema, mas tudo bem, se o fizer, o regex impedirá que ele adicione novas linhas espúrias.
Se você quiser evitar adicionar uma linha em branco antes do primeiro URL:
perl -pe 'BEGIN { $/ = "//"; print scalar <> } s!(?=http://\z)!\n!' urls.txt
Você pode testar o benchmarking para ver se s!http://\z!\nhttp://!
é mais rápido. Eles são equivalentes. Observe que o sinal /g
não é necessário na substituição, porque só pode haver uma correspondência por "linha".