Retornando uma parte de uma linha que corresponde a um padrão

1

Eu tenho um arquivo (file_name) que contém exatamente uma ocorrência da string "Result:" no início de uma linha. Quero imprimir todos os caracteres após a string "Resultado:" nessa linha até encontrar um '.' personagem. Qual comando de shell devo usar?

    
por RIchard Williams 16.11.2011 / 13:58

3 respostas

2

Você pode usar sed . Assim:

sed -e 's/Result:\(.*\)\..*$//g' file_name

se você quiser salvar o resultado no mesmo arquivo, poderá adicionar -i a sed arguments

    
por 16.11.2011 / 14:06
2

Uma versão moderna do GNU grep que faz regexes perl fará:

grep -P -o '^Result: \K[^.]*'

-o diz ao grep para imprimir apenas a parte da linha correspondente. -P com \K na regex é uma asserção de look-behind com largura zero que faz com que o material antes do \K não faça parte da correspondência (largura zero).

Veja também: O grep pode exibir apenas os agrupamentos especificados que correspondem

    
por 16.11.2011 / 14:07
0
<file_name sed -n 's/^Result: \([^.]*\)\..*//p'
<file_name awk '/^Result:.*\./ {sub(/^Result: /,""); sub(/\..*/, ""); print}'
<file_name grep '^Result: .*\.' | sed 's/^Result: //' | sed 's/\..*//'

Se a presença de . não for necessária, mude para

<file_name sed -n -e 's/\..*//' -e 's/^Result: //p'
<file_name awk '/^Result: / {sub(/^Result: /,""); print}'
<file_name grep '^Result: ' | sed 's/^Result: //'

Veja esta resposta para o fundo das soluções sed.

    
por 17.11.2011 / 00:43