Como selecionar e enviar texto em uma string

2

Eu preciso selecionar e gerar em um arquivo algum texto contido em uma string específica.

Digamos que a string seja: ABCDEFGHIJKLMNOP

O que seria um comando para extrair o que é depois de ABCDEF e antes de K? (ou seja, apenas GHIJ) para outro arquivo?

Eu tentei com o comando grep, mas devido à minha pouca compreensão de sua complexidade, ele falhava o tempo todo. Eu devo estar perdendo algo muito básico.

Agradecemos antecipadamente.

    
por ivako 07.01.2017 / 12:30

3 respostas

5

Estou assumindo que você está programando usando um shell, como bash .

Você precisará de sed .

por exemplo,

sed -re 's/^ABCDEF(.*)K.*//'

Isso usa o grep para pesquisar e substituir s/thing to find as regexp/thing to replace it with/

significa substituir pela primeira expressão em colchetes.

    
por 07.01.2017 / 12:50
4

Ao encontrar uma correspondência, o grep imprime toda a linha correspondente. Para imprimir apenas o texto correspondente, você pode usar a opção -o . Mas, isso imprime toda a string combinada dentro da linha. Para imprimir o que você precisa, você deve usar as declarações de look-behind e look-ahead . Isso requer um grep com suporte a PCRE.

> grep -Po '(?<=ABCDEF).+(?=K)' <<< 'ABCDEFGHIJKL'
GHIJ

Explicação:

  • -P Ativar expressão regular compatível com perl
  • -o Imprimir apenas o texto correspondente, não linha inteira
  • (?<=ABCDEF) Asserção positiva de look-behind para correspondência de ABCDEF
  • (?=K) Asserção de look-ahead positivo para correspondência de K
  • .+ Combine tudo entre as afirmações acima
por 07.01.2017 / 12:47
3

Não há nada de errado com qualquer uma das soluções postadas, mas você pode fazer isso em Bash puro, se quiser.

Dada uma string com seu valor:

echo $myStr 
ABCDEFGHIJKLMNOP

Você pode fazer:

echo $(expr match "$myStr" '.*F\(.*\)K.*')
GHIJ
    
por 07.01.2017 / 15:33