Использование AWKAWK
- это самое простое, что можно получить:
awk '/yellow/,0' textfile.txt
Пробный прогон
$ awk '/yellow/,0' textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Grep
Вы также можете использовать grep
с --after-context
опцией, чтобы напечатать определенное количество строк после матча
grep 'yellow' --after-context=999999 textfile.txt
Для автоматической настройки контекста вы можете использовать $(wc -l textfile.txt)
. Основная идея заключается в том, что если у вас есть самая первая строка в качестве совпадения и вы хотите напечатать все после этого совпадения, вам нужно знать количество строк в файле минус 1. К счастью, --after-context
не будет выдавать ошибки о количестве линий, так что вы могли бы дать ему номер полностью вне диапазона, но в случае, если вы не знаете, общее количество строк будет делать
$ grep 'yellow' --after-context=$(wc -l < textfile.txt) textfile.txt
yellow
red
orange
more orange
more blue
this is enough
Если вы хотите сократить команду --after-context
- это та же опция, что -A
и $(wc -l textfile.txt)
, расширится до количества строк, за которыми следует имя файла. Таким образом, вы печатаете textfile.txt
только один раз
grep "yellow" -A $(wc -l textfile.txt)
питон
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')
Или альтернативно без printable
флага
#!/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
команду доgrep "yellow" -A $(wc -l textfile.txt)
.