substitua duas palavras separadas em uma string correspondida sed

1

Considere a seguinte string de entrada.

PLOG_NFET_SLVT nf=3 ng=1 nl=20n

Saída

PLOG_NFET_LVT nf=3 ng=1 nl=14n

Nota: a primeira e a última palavra são substituídas. Também entre os dados varia. Então eu não posso ter um padrão constante. Eu tentei usar o comando abaixo.

sed -i 's/PLOG.*FET_SLVT.*nl=20n/PLOG.*FET_LVT.*nl=14n/g' file

e a saída é:

PLOG.*FET_LVT.*nl=14n

Alguma ajuda?

    
por Roopak Vasa 02.08.2018 / 13:43

3 respostas

1

Você pode usar um grupo de captura no padrão de pesquisa e adicionar a referência anterior ( ou ) ao padrão de substituição:

sed 's/PLOG_\([A-Z]\)FET_SLVT \(.*\) nl=20n/PLOG_FET_LVT  nl=14n/'
    
por 02.08.2018 / 13:51
1

Tente isso,

 sed -i 's/^PLOG_NFET_SLVT/PLOG_NFET_LVT/g;s/20n$/14n/g' file
  • pesquise o padrão começa com PLOG_NFET_SLVT e substitua por PLOG_NFET_LVT
  • e pesquise o padrão termina com 20n e substitua por 14n
por 02.08.2018 / 13:53
0

Tente isto:

sed 's/SLVT/LVT/;s/20n/14n/'

Exemplo

$ echo "PLOG_NFET_SLVT nf=3 ng=1 nl=20n" | sed 's/SLVT/LVT/;s/20n/14n/'
PLOG_NFET_LVT nf=3 ng=1 nl=14n
    
por 02.08.2018 / 13:52