com sed
:
sed -n '/R/,$!d; /S/q; p'
Exemplo:
$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9
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?
com sed
:
sed -n '/R/,$!d; /S/q; p'
Exemplo:
$ seq 20 | sed -n '/6/,$!d; /1/q; p'
6
7
8
9
com perl:
# perl -ne 'print if ( /R/ .. /S/ ); last if /S/'
Imprime a expressão regular S-Matching, tho '
com o awk
awk 'x&&/S/{exit};x+=/R/' file
Exemplo
seq 20 | awk 'x&&/1/{exit};x+=/6/'
6
7
8
9
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)