Como encontrar a palavra depois de um determinado padrão usando o corte?

0

Eu tenho um arquivo assim:

-config1
-config2 param2
-config3 param3a param3b
-config4 param4

e eu posso usar o seguinte para extrair param2 :

echo $(<file) | cut -d' ' -f3

No entanto, gostaria de corrigi-lo de tal forma que eu sempre recebo a palavra depois -config2 , de tal forma que se estes forem reorganizados ou algo for inserido, meu comando ainda funcionará. O que eu deveria estar olhando?

Esclarecimento: pode haver mais de um parâmetro em qualquer linha (ou nenhuma), mas sempre haverá no máximo uma opção -config por linha.

    
por user2813274 31.03.2015 / 20:43

3 respostas

2

Eu usaria o awk para isso

awk '/^-config2/ {print $2}' file

Imprime o segundo argumento de linhas começando com -config2 . O ^ significa o começo da linha.

    
por 31.03.2015 / 20:52
2

Tente isto:

perl -ne 'if (/-config2\s*(.*)/) { print "$1\n"; }'

Isso procura linhas correspondentes a -config2 e, em seguida, imprime o restante de a linha ( \s* corresponde a uma quantidade arbitrária de espaço em branco, (.*) corresponde a qualquer coisa e liga-a a $1 ).

Minha resposta anterior, que assumiu que -config2 foi seguido por um única palavra:

perl -ne 'if (/-config2\s*(\S+)/) { print "$1\n"; }'

Isso procura linhas correspondentes a -config2 e, em seguida, imprime a primeira token após ele ( \s* corresponde a uma quantidade arbitrária de espaço em branco, (\S+) corresponde a uma sequência não vazia de caracteres que não são espaços em branco e o associa a $1 ).

    
por 31.03.2015 / 20:46
1

Uma variação com sed:

sed -n 's/^-config2 //p' file

-n suprime a impressão automática

s/^-config2 // substitui -config2 e espaço final na linha começa sem nada no espaço padrão

p espaço de impressão padrão

    
por 31.03.2015 / 21:25