Com um único programa sed:
sed -E '
# remove leading comment chars
s/^[[:blank:]]*#+[[:blank:]]*//
# label "a" for branching
:a
# if trailing slash:
/\$/ {
# read next line
N
# remove backslash, newline, leading whitespace and comment char
s/\\n[[:blank:]]*#*[[:blank:]]*/ /
# branch to label "a"
ba
}
# remove blank lines
/^[[:blank:]]*$/d
' test.txt
O Perl é bastante compacto: leia os parágrafos ( -00
) e substitua os espaços em branco iniciais e comente caracteres para cada linha no parágrafo (os modificadores /m
e /g
) e remova a nova linha de barra invertida.
perl -00 -lanE 's/^\s*#*\s*//mg; s/\(?:\Z|\n)/ /g; say' test.txt