pt sed para substituir por backspace

2

Eu tenho trail.txt , que contém spice netlist. Agora, quero substituir todos os parâmetros expandidos por apenas uma linha, ou seja, remover + e anexar essa linha à linha anterior.

trail.txt

data
+ net06706 net06707
+ net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

(Desired) trail.txt

data net06706 net06707 net221 net222 net223 
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u 
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u 

Comando

sed -e 's/^+/\b/g' trail.txt

Tentei repalciar + com backspace , mas não está funcionando. Existe alguma maneira alternativa de trabalhar nisso? Existem outras alternativas disponíveis?

    
por JigarGandhi 06.02.2015 / 15:47

6 respostas

2

Eu não acho que você possa usar uma abordagem de backspace - no entanto, você poderia fazer algo como

sed -e :a -e '$!N;s/\n+/ /;ta' -e 'P;D' trail.txt

Veja Famous Sed One-Liners Explained, Parte I: Espaçamento de arquivos, Numeração e Conversão de Texto e Substituição , 40. Anexe uma linha à anterior, se ela começar com um sinal de igual "=" (com a substituição óbvia de + para = ).

    
por 06.02.2015 / 16:01
2

FWIW, GNU awk

awk -vRS='\n\+?' '{ORS=RT == "\n+"? "":RT; print}' trail.txt
data net06706 net06707 net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u
    
por 06.02.2015 / 16:18
2

Algumas ideias, já que será um pouco complicado com sed:

perl -00 -pe 's/\n\+\s*/ /g' file
awk '
    {
        if (/^\+/) 
            sub(/^\+[[:blank:]]*/, " ", $0)
        else 
            if (NR > 1) print ""
        printf "%s", $0
    } 
    END {print ""}
' file 
    
por 06.02.2015 / 16:31
0

Use Perl ao invés de sed:

perl -ne 'chomp; print "\n" unless s/^\+// or 1 == $.; print }{ print "\n"'

chomp remove a nova linha. $. é o número da linha de entrada.

    
por 06.02.2015 / 15:59
0

GNU sed permite não usar perl para tarefas tão simples:

sed -z 's/\n+//g' trail.txt
    
por 06.02.2015 / 17:39
-1
sed  's/.$//'

sed  's/.$//g'

Isso deve funcionar. Trabalhou para mim

    
por 22.07.2015 / 09:33