Extraindo subconjunto de linhas de um arquivo baseado em regex para a primeira e última linha

7

Eu tenho um arquivo de texto grande e só quero ver algumas das linhas. A primeira linha que quero corresponder a um regex R e quando a linha corresponder ao regex S , não me importo com essa linha nem com as linhas a seguir. As linhas no meio não corresponderão a R . Existe uma maneira de fazer isso na linha de comando em um comando bash para que eu possa canalizar a saída em algum lugar depois?

    
por Rory 28.04.2015 / 10:55

4 respostas

5

com sed :

sed -n '/R/,$!d; /S/q; p'

Exemplo:

$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9
    
por 28.04.2015 / 11:24
2

com perl:

# perl -ne 'print if ( /R/ .. /S/ ); last if /S/'

Imprime a expressão regular S-Matching, tho '

    
por 28.04.2015 / 11:52
2

com o awk

awk 'x&&/S/{exit};x+=/R/' file

Exemplo

seq 20 | awk 'x&&/1/{exit};x+=/6/'
6
7
8
9
    
por 28.04.2015 / 11:35
-1

Eu escrevi um programa para resolver esse de

Você pode usá-lo assim:

cat file | fromto -f R -T S

Onde R é a regex que você quer pegar de , e S é a regex que você quer pegar para . Ele irá imprimir todas as linhas entre os dois. -f significa "incluir a linha 'de'", -F significaria "não inclua a linha 'de'". Da mesma forma com -t / -T . A questão era excluir a linha 'para', portanto -T é o argumento para essa exigência. Se você usou -t , imprimiria a linha 'para' (mas não as linhas depois)

    
por 28.04.2015 / 15:37