Como excluir o que há entre dois espaços ou espaços em branco usando sed?

0

Eu tenho esse padrão:

ethernet-em1     016f2bbf-3268-4229-a25b-c7f94b6e52dc  802-3-ethernet  em1
virbr0           4fc0e260-b21a-4a9d-a74d-3ec9f124976f  bridge          virbr0

o que eu quero é conseguir este:

ethernet-em1    802-3-ethernet  em1
virbr0          bridge          virbr0

O regex que estou procurando é excluir o que há entre dois Blanks.

Então, como posso alcançar o resultado anterior usando "sed"?

Obrigado.

    
por M.T 13.02.2018 / 17:25

2 respostas

1

Como o que você deseja excluir é o UUID, basta excluí-lo e o espaço em branco antes:

sed 's/\s\s*[0-9a-f-]*//'

ou até mesmo

sed 's/\s\s*[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*//'

Remover "tudo entre espaços" é feito por

 sed 's/\(\s\s*\)[^\s][^\s]*\(\s\)//'

, mas produz um resultado diferente: ele produzirá

 ethernet-em1      em1
 virbr0            virbr0

como a terceira palavra também é "entre espaços"

    
por 13.02.2018 / 17:33
1

Se você quiser uma resposta específica usando sed , responda por Eugen Rieck é perfeito.

Outra solução para os problemas de seleção de dados com base no espaço como delimitador será usando awk :

awk -F' ' '{print $1" "$3" "$4}'

Isso deixará a segunda coluna e imprimirá outras três com espaço, conforme mostrado abaixo:

ethernet-em1    802-3-ethernet  em1
virbr0          bridge          virbr0
    
por 21.02.2018 / 07:15