Como remover string após a palavra correspondente no bash?

0

Eu quero excluir string após a palavra correspondente no bash.

Suponha que:

eth0      Link encap:Ethernet-12 HWaddr 94:EE:88:00:FA:AA

Eu quero remover encap:Ethernet-12 desta linha.

Ele deve se tornar como eth0 Link HWaddr 94:EE:88:00:FA:AA . Como conseguir isso?

    
por user2761565 25.04.2018 / 13:15

2 respostas

1

sed -r 's/(eth0 Link )[^ ]+ //'

Em slo-mo:

  • corresponde eth0 Link (com espaço final) e mantém
  • corresponde a qualquer espaço não consecutivo (assim, a próxima palavra)
  • corresponde a um espaço adicional
  • substitua o lote pela string mantida na primeira correspondência

    ~>echo "eth0 Link encap:Ethernet-12 HWaddr 94:EE:88:00:FA:AA" | sed -r 's/(eth0 Link )[^ ]+ //'                                    
    eth0 Link HWaddr 94:EE:88:00:FA:AA
    

is it possible to do it with searching encap and then replacing string after it till space?

Sim. Este filtro

sed -r 's/encap[^ ]+ //'

substituirá a parte encap (espaço à direita incluído) por literalmente nada, removendo-a efetivamente.

    
por 25.04.2018 / 13:29
0
after searching a lot found one silly solution.
replace space with newline and again replace newline with space. Sorry for such bad solution but if we know space is separator, we can use it.

   #var='echo "eth0 Link encap:Ethernet-12 HWaddr 94:EE:88:00:FA:AA" | tr " " "\n" | egrep -v "encap" | tr "\n" " "'
    #echo $var
    eth0 Link HWaddr 94:EE:88:00:FA:AA

Eu sei que o sed é o caminho certo, mas não estou conseguindo como alcançá-lo. No meu caso, posso tomar espaço como separador.

    
por 25.04.2018 / 14:19

Tags