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