Sem outras opções, -p processa a entrada linha por linha. Nenhuma linha pode conter nada após o \n . Você precisa alterar o separador de registro:
perl -i~ -0pe 's/ab\nba/a a/' file.txt
-
-i~modificará o arquivo "in place", deixando um backup para trás (chamadofile.txt~) -
-0torna o caractereo separador de registro de entrada. O importante é que não ocorra a substituição da string, por isso nunca lerá apenas uma parte dela.-p -
$_lê o registro do arquivo por registro, e depois de ler cada um, ele executa o código e imprime a variável padrão-e - %code% apenas introduz o código.