Uma maneira é usar a opção -o
do grep, combinada com o poder de PCREs ( -P
):
-o, --only-matching
Print only the matched (non-empty) parts of a matching line,
with each such part on a separate output line.
-P, --perl-regexp
Interpret PATTERN as a Perl regular expression (PCRE, see
below). This is highly experimental and grep -P may warn of
unimplemented features.
Então, você poderia fazer
unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | grep -oP ':\Ktaxonomies-[^"]*' | head -1
O \K
faz com que qualquer coisa correspondente a esse ponto seja ignorada (portanto, o :
não é impresso) e [^"]*"
significa "corresponde a tantos caracteres que não são "
.
Outras opções incluem:
-
sed
unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | sed -n 's/.*:\(taxonomies-[^"]*\).*//p' | head -1
O
-n
faz com quesed
imprima nada, a menos que explicitamente informado e os///
seja o operador de substituição. Ele substituirá tudo na linha pela parte da linha entre os parênteses (). O
p
faz com que a linha resultante seja impressa. -
Perl
unzip -p GLP.K4C.S06F5.BG57218-rdf.zip | perl -lne 's/.*:(taxonomies-[^"]).*/$1/ && print' | head -1
A mesma ideia básica do
sed
. Se a substituição foi bem sucedida, a linha é impressa. Uma alternativa seriaunzip -p GLP.K4C.S06F5.BG57218-rdf.zip | perl -lne '/.*:(taxonomies-[^"])/ && print $1' | head -1