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.
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.
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 ).
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
Tags text-processing cut