AWK-
Verwendung AWK
- das ist so einfach wie möglich:
awk '/yellow/,0' textfile.txt
Probelauf
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
Sie können auch verwenden , grep
mit --after-context
Option, gewisse Linien nach dem Spiel zu drucken
grep 'yellow' --after-context=999999 textfile.txt
Für die automatische Einstellung des Kontexts können Sie verwenden $(wc -l textfile.txt)
. Die Grundidee ist, dass, wenn Sie eine erste Zeile als Übereinstimmung haben und alles nach dieser Übereinstimmung drucken möchten, Sie die Anzahl der Zeilen in der Datei minus 1 kennen müssen. Glücklicherweise --after-context
werden keine Fehler über die Anzahl der Zeilen ausgegeben Zeilen, so dass Sie die Nummer vollständig außerhalb des Bereichs angeben können, aber falls Sie es nicht wissen, reicht die Gesamtzahl der Zeilen aus
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Wenn Sie den Befehl kürzen möchten, --after-context
ist dies die gleiche Option wie -A
und $(wc -l textfile.txt)
, wird auf die Anzahl der Zeilen gefolgt vom Dateinamen erweitert. Auf diese Weise tippen Sie textfile.txt
nur einmal
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')
Oder alternativ ohne printable
Flagge
#!/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
Befehl vereinfachengrep "yellow" -A $(wc -l textfile.txt)
.grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
.Sie können es tun durch:
Dabei ist "Datei" der Dateiname, der Ihren Text enthält.
quelle
Nicht
grep
, aber mitsed
:-n
: verhindert das Drucken/^yellow$/,$
: Adressbereich, der vom ersten Auftreten einer Zeileyellow
bis zur letzten Zeile einschließlich reichtp
: druckt die Zeilen im Adressbereichquelle
Spät zur Party :)
Verwenden von
grep
:-P
ermöglicht es uns, Perl-kompatibles Regex zu verwenden-z
Trennt die Eingabedatei durch ASCII NUL und nicht durch die neue Zeile-o
nimmt nur die gewünschte Portion(?s)
ist der DOTALL-Modifikator, der es uns ermöglicht, Zeilenumbrüche mit Token.
(beliebige Zeichen) abzugleichen.In
\n\K
,\n
stimmt mit einer neuen Zeile überein,\K
verwirft die Übereinstimmungyellow\n.*
Übereinstimmungenyellow
gefolgt von einem Zeilenumbruch und alles, was danach folgt, wird ebenfalls ausgewählt und in der Ausgabe angezeigt.Beispiel:
Mit wenig
python
:lines
ist die Liste, die alle Zeilen der Datei enthält (auch mit nachgestellten Zeilenumbrüchen)lines.index('yellow\n')
gibt uns den niedrigsten Index,lines
woyellow\n
gefunden wirdlines[lines.index('yellow\n'):]
verwendet List Slicing, um die Portion von Anfangyellow\n
bis Ende zu erhaltenjoin
verbindet die Elemente der Liste, um sie als Zeichenfolge auszugebenquelle
yellow
in der Zeile übereinstimmen wollen. Auch wenn dies nicht der Fall ist, müssen wirpython
das Algo ändern .grep
und nicht nur mit vollständigen Zeilen übereinstimmt. Ich habe übrigens gestimmt.Da sich die Frage auf das Anzeigen der Datei bezieht , gibt es immer den guten alten
quelle
less
dass ich das kann. Sehr schön !