remova os símbolos extras e ajuste as linhas

0

Eu tenho um arquivo de texto (test.txt) que é exatamente assim (o mesmo número de opções para cada instância):

# a comment

first: info about first:  option1 \
                          option2 \
                          option3

second: info about second: option1 \
  option2 \
  option3

#third: info about third: option1 \
#                         option2 \
#                         option3

fourth: info about fourth: option1 \
                           option2 \
                           option3 \

Eu quero reorganizar o texto para que fique assim:

a comment first: info about first: option1 option2 option3 
second: info about second: option1 option2 option3 
third: info about third: option1 option2 option3 
fourth: info about fourth: option1 option2 option3
    
por Rui F Ribeiro 09.10.2018 / 13:00

2 respostas

2

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
    
por 09.10.2018 / 16:52
0
sed 's/^#/ /g;s/\/ /g' file | xargs | sed 's/option3 /option3 \n/g'

a comment first: info about first: option1 option2 option3 
second: info about second: option1 option2 option3 
third: info about third: option1 option2 option3 
fourth: info about fourth: option1 option2 option3

sed 's/^#/ /g substitui # por espaços vazios e ^ corresponde à # posição nas strings. Então sed s/\/ /g' substitui barras invertidas \ por espaços vazios.

xargs alinha e cria espaços em branco iguais entre as palavras.

finalmente, sed adiciona novas linhas após cada palavra "opção3"

    
por 09.10.2018 / 13:10

Tags