sed para substituir a palavra correspondente ao fim da linha

0

Estou tentando remover todos os caracteres após determinado padrão de correspondência, ou seja, nfin até o final da linha.

sample_text

xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2 pdej=1.6e-07 asej=3.2e-16 lrsd=4e-08 pre_layout_local=0 

Comando

sed -i "s/nfin\=[0-9].*//g" sample_text

Saída desejada

xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2  
    
por JigarGandhi 15.02.2017 / 07:21

3 respostas

4

Experimente este sed :

sed -E 's/ pdej.*$//'

Exemplo:

sed -E 's/ pdej.*$//' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2

Onde file.txt contém:

cat file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2 pdej=1.6e-07 asej=3.2e-16 lrsd=4e-08 pre_layout_local=0


OR:
Se você quiser (precisa) usar nfin como uma âncora das sortes, use:

sed -E 's/(.*nfin=[0-9]).*//' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2
    
por 15.02.2017 / 07:35
1
sed -ne 's/[ ]nfin=[^ ]*/&\n/;P' < your_spice_netlist

Mas você deve ter em mente que as netlists do spice podem ter instâncias ('x') ou qualquer elemento que cruze fronteiras de linha e, em tal cenário, o código sed acima pode não funcionar, pois talvez o parâmetro nfin possa estar o início de uma linha, como, + nfin = 23. Além disso, às vezes, 'nfin' pode aparecer parametrizado, por exemplo, nfin = 'width * 0.5 + 1./nfac*len', onde o nfin = [0-9] não corresponderá.

No entanto, se você puder garantir que não há multilinhas (pelo menos para instâncias), o acima deve funcionar de forma confiável. Também não há TABs.

    
por 15.02.2017 / 10:31
0
sed -i "/nfin=[0-9]/{s//&\n/;P;d;}" sample_text

removerá o restante da linha após nfin=[0-9]
Para linha (s) com nfin=[0-9] :

  • coloque \n ewline após o padrão ( & )
  • P rint linha antes de \n ewline
  • d elete line (imprime mais)
por 15.02.2017 / 10:08

Tags