Utilisation d' AWKAWK
- c'est la plus simple possible:
awk '/yellow/,0' textfile.txt
Exemple d'exécution
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
Vous pouvez également utiliser grep
avec --after-context
option, pour imprimer une certaine quantité de lignes après la correspondance
grep 'yellow' --after-context=999999 textfile.txt
Pour le réglage automatique du contexte, vous pouvez utiliser $(wc -l textfile.txt)
. L'idée de base est que si vous avez une toute première ligne comme correspondance et que vous souhaitez tout imprimer après cette correspondance, vous devrez connaître le nombre de lignes dans le fichier moins 1. Heureusement, --after-context
ne générera pas d'erreurs sur le nombre de lignes, vous pouvez donc lui donner un numéro complètement hors de portée, mais si vous ne le connaissez pas, le nombre total de lignes fera l'affaire
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Si vous souhaitez raccourcir la commande, --after-context
c'est la même option que -A
et $(wc -l textfile.txt)
, s'étendra au nombre de lignes suivi du nom du fichier. Ainsi, vous textfile.txt
ne tapez qu'une seule fois
grep "yellow" -A $(wc -l textfile.txt)
Python
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 bien sans printable
drapeau
#!/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
commande engrep "yellow" -A $(wc -l textfile.txt)
.grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
.Vous pouvez le faire en:
où "fichier" est le nom du fichier contenant votre texte.
la source
Non
grep
, mais en utilisantsed
:-n
: inhibe l'impression/^yellow$/,$
: plage d'adresses qui va de la première occurrence d'une ligne correspondant exactementyellow
à la dernière ligne inclusep
: imprime les lignes de la plage d'adressesla source
Tard à la fête :)
En utilisant
grep
:-P
nous permet d'utiliser Regex compatible Perl-z
rend le fichier d'entrée séparé par ASCII NUL, plutôt que la nouvelle ligne-o
ne prend que la portion désirée(?s)
est le modificateur DOTALL, nous permet de faire correspondre la nouvelle ligne à l'aide d'un jeton.
(n'importe quel caractère)Dans
\n\K
,\n
correspond à une nouvelle ligne,\K
supprime la correspondanceyellow\n.*
correspondyellow
à une nouvelle ligne et tout ce qui suit est également sélectionné et affiché dans la sortie.Exemple:
Utiliser peu
python
:lines
est la liste contenant toutes les lignes du fichier (avec des retours à la ligne finaux aussi)lines.index('yellow\n')
nous donne l'indice le plus baslines
oùyellow\n
se trouvelines[lines.index('yellow\n'):]
utilisera le découpage de liste pour obtenir la portion de layellow\n
fin à la finjoin
joindra les éléments de la liste pour produire une chaînela source
yellow
dans la ligne .. aussi si ce n'est pas le cas, alors nous devons changer l'python
algo de son ..grep
et ne correspond pas uniquement aux lignes complètes. J'ai voté contre btw.Puisque la question se réfère à la visualisation du fichier, il y a toujours le bon vieux '
la source
less
pouvoir faire ça. Très agréable !