sed '/./s/^/\section{}/'
Anexará \section{}
a todas as linhas que contiverem pelo menos um caractere válido .
sed '/^$/!s/^/\section{}/'
Anexará \section{}
a todas as linhas não vazias (ou seja, linhas que contenham pelo menos um byte ).
sed 's/./\section{}&/'
Inseria \section{}
antes do primeiro caractere válido em cada linha (que possui um caractere tão válido). ( &
é substituído pela parte correspondente).
Essas distinções entre byte e caractere podem ser significativas se você estiver em uma localidade com vários bytes por caractere (como UTF-8, que tende a ser o norma hoje em dia), mas lidar com texto codificado em um conjunto de caracteres de byte único estendido.
Por exemplo:
$ locale charmap
UTF-8
$ echo Москва | iconv -t iso-8859-5 | sed 's/./\section{}&/' | iconv -f iso-8859-5
Москва
(quando codificado em iso-8859-5, nenhum dos valores de byte resultante de Москва forma um caractere válido em UTF-8, portanto /./
não corresponde a nada).
Como no seu caso, a codificação não seria uma preocupação, pois o texto que você inseriu é ASCII, você pode corrigir a localidade para C para evitar surpresas:
$ echo Москва | iconv -t iso-8859-5 | LC_ALL=C sed 's/./\section{}&/' | iconv -f iso-8859-5
\section{}Москва