Mostra apenas parte da linha encontrada pelo grep (mas não a parte que corresponde ao padrão)

5

Em ifcfg-eth0 , consegui grep "DEVICE = eth0" usando

grep "DEVICE=" ifcfg-eth0

Mas como posso usar o padrão grep para mostrar apenas "eth0"?

    
por kyusan93 16.10.2013 / 04:44

2 respostas

9

grep não é realmente a ferramenta para isso (embora versões do GNU grep ofereçam várias opções que fazem coisas semelhantes). sed ou awk são muito mais adequados para essa tarefa.

awk -F= '$1 == "DEVICE" { print $2 }'
sed -n 's/^DEVICE=//p'
    
por 16.10.2013 / 04:59
7

É possível fazer isso usando o GNU grep com a opção -P (PCRE). É importante observar que nem todas as versões do GNU grep são compiladas com suporte para a opção -P .

Eu pessoalmente usaria awk conforme recomendado por Chris Down, mas eu queria fornecer a grep de resposta solicitada para ser completa.

grep -Po '(?<=DEVICE=).+' ifcfg-eth0

A construção (?<=) é conhecida como look-behind . Ele é usado para encontrar a partida, mas não está incluído na partida real.

    
por 16.10.2013 / 06:25