Uso AWKAWK
- é o mais simples possível:
awk '/yellow/,0' textfile.txt
Amostra de execução
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
Você também pode usar grep
com a --after-context
opção imprimir uma certa quantidade de linhas após a partida
grep 'yellow' --after-context=999999 textfile.txt
Para configuração automática de contexto, você pode usar $(wc -l textfile.txt)
. A idéia básica é que, se você tiver uma primeira linha como uma correspondência e quiser imprimir tudo depois dessa correspondência, precisará saber o número de linhas no arquivo menos 1. Felizmente, --after-context
não lançará erros sobre o número de linhas, para que você possa dar um número completamente fora do intervalo, mas, caso não o conheça, o número total de linhas será suficiente
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Se você deseja reduzir, o comando --after-context
é a mesma opção que -A
e $(wc -l textfile.txt)
, será expandido para o número de linhas seguidas pelo nome do arquivo. Dessa forma, você digita textfile.txt
apenas uma vez
grep "yellow" -A $(wc -l textfile.txt)
Pitão
skolodya@ubuntu:$ ./printAfter.py textfile.txt
yellow
red
orange
more orange
more blue
this is enough
DIR:/xieerqi
skolodya@ubuntu:$ cat ./printAfter.py
#!/usr/bin/env python
import sys
printable=False
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
printable=True
if printable:
print line.rstrip('\n')
Ou, alternativamente, sem printable
bandeira
#!/usr/bin/env python
import sys
with open(sys.argv[1]) as f:
for line in f:
if "yellow" in line:
for lines in f: # will print remaining lines
print lines.rstrip('\n')
exit()
grep
comando paragrep "yellow" -A $(wc -l textfile.txt)
.grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
.Você pode fazer isso:
onde "arquivo" é o nome do arquivo que contém seu texto.
fonte
Não
grep
, mas usandosed
:-n
: inibe a impressão/^yellow$/,$
: intervalo de endereços que vai da primeira ocorrência de uma linha que corresponde exatamenteyellow
à última linha, inclusivep
: imprime as linhas no intervalo de endereçosfonte
Tarde para a festa :)
Usando
grep
:-P
permite usar Regex compatível com Perl-z
torna o arquivo de entrada separado por ASCII NUL, em vez da nova linha-o
leva apenas a parte desejada(?s)
é o modificador DOTALL, permite corresponder nova linha usando token.
(qualquer caractere)Em
\n\K
,\n
corresponde a uma nova linha,\K
descarta a correspondênciayellow\n.*
correspondênciasyellow
seguidas por uma nova linha e tudo depois disso também é selecionado e mostrado na saída.Exemplo:
Usando pouco
python
:lines
é a lista que contém todas as linhas do arquivo (com novas linhas à direita também)lines.index('yellow\n')
nos dá o menor índice delines
ondeyellow\n
é encontradolines[lines.index('yellow\n'):]
usará o fatiamento de lista para obter a parte que vai do início aoyellow\n
fimjoin
juntará os elementos da lista para produzir como uma sequênciafonte
yellow
no line..also se isso não for o caso, então é preciso mudar opython
de um algo ..grep
e não corresponde apenas às linhas completas. Eu votei a favor.Como a pergunta se refere à visualização do arquivo, sempre há o bom e velho
fonte
less
pode fazer isso. Muito agradável !