Корректно сделать так (
str.splitlines):
s=' a b \r\n c d \n e f '
result = '\n'.join(s.splitlines()[1:])
Правда, переносы строк изменятся, если они были не '\n', но зато всё будет работать чётко и по лучшим рецептам Unicode.
Можно ещё с
regexp:
import re
s=' a b \r\n c d \r e f '
template = r"[^\n\r]*(\r\n|\n\r|[\n\r])?"
result = re.sub( template, "", s, count=1)
Здесь после первой строки всё сохранится как было неприкосновенным, даже нестандартные переводы строк (которые не '\n').
Regex хорош тем, что всё можно настраивать как самим хочется. Выше приведён пример для часто встречающихся переводов строк, а вот для всех (надеюсь) вариантов переводов строк, включая даже нуль-символ, который тоже иногда может использоваться для разделения строк (и стандартная splitlines уже с таким не справится, а regex может):
import re
s=' a b \u0000 c d \n e f '
template = r"[^\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00]*(\r\n|\n\r|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00])?"
result = re.sub( template, "", s, count=1)
Или так, через
re.split:
import re
s=' a b \r\n c d \n e f '
template = r"\r\n|\n\r|[\n\r\v\f\x1c\x1d\x1e\x85\u2028\u2029\x00]"
result = "".join( re.split( template, s, maxsplit=1 )[1:] )