sed '/\begin{alltt}/,/\end{alltt}/s/~/ /g'
Substituiria todo o ~
s por espaços. Se você quisesse substituir apenas o ~
s da primeira sequência de ~
s em cada linha, você poderia fazer:
sed '
/\begin{alltt}/,/\end{alltt}/{
/~/ {
h; # save a copy
s/\(~\{1,\}\).*//; # remove everything after the first sequence of ~s
s/~/ /g; # replace ~s with spaces
G; # append the saved copy
s/\n[^~]*~*//; # retain only what's past the first sequence of ~s
# from the copy
}
}'
Observação: \{1,\}
é o equivalente padrão de sua extensão \+
GNU.
É mais fácil com perl
:
perl -pe 's{~+}{$& =~ s/~/ /gr}e if /\begin\{alltt\}/ .. /\end\{alttt\}/'
ou:
perl -pe 's{~+}{" " x length$&}e if /\begin\{alltt\}/ .. /\end\{alttt\}/'