Isso acontece porque /(.*)\n/
também está correspondendo a uma nova linha simples ( \n
: seqüência vazia, seguida por nova linha, seguida da sequência vazia mesma desde o início).
Por isso, também corresponderá à string one_more\ntwo
do seu exemplo.
Para evitar isso, você precisará ancorar seus regexps, por exemplo sed -E '$!N;/^(.+)\n/!P;D'
ou sed -E '$!N;/^(.*)\n/!P;D'
.