Вы можете .*
съесть столько строк, сколько сможете (потому что *
является жадным), прежде чем сопоставить _
:
sed 's/\(.*\)_/\1\n/' file
или спорным лучше
sed -E 's/(.*)_/\1\n/' file
Что касается вашей попытки, у нее есть 3 ошибки:
_
не нужно экранировать '
не может быть вложенным (это из-за оболочки, а не sed
); fwiw, я не понимаю, почему вы положили их туда: что вы пытались сделать? - если вы исправите два приведенных выше, заканчивая
sed 's/_/\n/g'
, вы замените все _
с, а не только последний.