Korzystanie z AWKAWK
- to najprostsze, jakie można uzyskać:
awk '/yellow/,0' textfile.txt
Przykładowy przebieg
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
Można również skorzystać grep
z --after-context
opcji, aby wydrukować pewną ilość wierszy po meczu
grep 'yellow' --after-context=999999 textfile.txt
Do automatycznego ustawienia kontekstu możesz użyć $(wc -l textfile.txt)
. Podstawową ideą jest to, że jeśli masz pierwszy wiersz jako dopasowanie i chcesz wydrukować wszystko po tym dopasowaniu, musisz znać liczbę wierszy w pliku minus 1. Na szczęście --after-context
nie wyrzuci błędów dotyczących liczby linii, więc możesz podać jej liczbę całkowicie poza zasięgiem, ale w przypadku, gdy jej nie znasz, zrobi to całkowita liczba linii
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Jeśli chcesz skrócić, polecenie --after-context
jest takie samo, jak -A
i $(wc -l textfile.txt)
, zostanie rozszerzone do liczby wierszy, po których następuje nazwa pliku. W ten sposób piszesz textfile.txt
tylko raz
grep "yellow" -A $(wc -l textfile.txt)
Pyton
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')
Lub alternatywnie bez printable
flagi
#!/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
polecenie dogrep "yellow" -A $(wc -l textfile.txt)
.grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
.Możesz to zrobić przez:
gdzie „plik” to nazwa pliku zawierającego tekst.
źródło
Nie
grep
, ale używającsed
:-n
: hamuje drukowanie/^yellow$/,$
: zakres adresów, który rozpoczyna się od pierwszego wystąpienia wiersza pasującego dokładnieyellow
do ostatniego wiersza włączniep
: drukuje linie w zakresie adresówźródło
Późno na imprezę :)
Używanie
grep
:-P
umożliwia nam korzystanie z Regex zgodnego z Perl-z
sprawia, że plik wejściowy jest oddzielany przez ASCII NUL, a nie nowy wiersz-o
zajmuje tylko żądaną porcję(?s)
jest modyfikatorem DOTALL, umożliwia dopasowanie nowej linii za pomocą tokena.
(dowolnego znaku)W
\n\K
,\n
dopasowuje nowy wiersz,\K
odrzuca dopasowanieyellow\n.*
dopasowania,yellow
po których następuje nowa linia i wszystko po tym jest również zaznaczone i pokazane w danych wyjściowych.Przykład:
Używając mało
python
:lines
jest listą zawierającą wszystkie linie pliku (również z końcowymi znakami nowej linii)lines.index('yellow\n')
daje nam najniższy wskaźnik tego,lines
gdzieyellow\n
znalezionolines[lines.index('yellow\n'):]
użyje wycinania list, aby uzyskać porcję od początkuyellow\n
do końcajoin
połączy elementy listy i wyśle jako ciągźródło
yellow
w linii .. również, jeśli tak nie jest, musimy zmienićpython
jego algo ..grep
i nie pasuje tylko do pełnych linii. Głosowałem za btw.Ponieważ pytanie dotyczy oglądania pliku, zawsze jest dobre
źródło
less
, że mogę to zrobić. Bardzo dobrze !