Использование 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)
.grep "yellow" -A $(wc -l < "my colors.txt") "my colors.txt"
.Вы можете сделать это:
где «файл» - это имя файла, содержащего ваш текст.
источник
Не
grep
, но используяsed
:-n
: запрещает печать/^yellow$/,$
: диапазон адресов от первого вхождения строки, точно совпадающейyellow
с последней строкой включительноp
: печатает строки в диапазоне адресовисточник
Поздно на вечеринку :)
Использование
grep
:-P
позволяет нам использовать Perl-совместимый Regex-z
делает входной файл разделенным ASCII NUL, а не переводом строки-o
занимает только желаемую порцию(?s)
является модификатором DOTALL, позволяет нам сопоставить символ новой строки с помощью токена.
(любой символ)В
\n\K
,\n
соответствует новая строка,\K
сбрасывает матчyellow\n.*
совпадения,yellow
за которыми следует символ новой строки, и все, что после этого, также выбирается и отображается в выходных данных.Пример:
Используя немного
python
:lines
список, содержащий все строки файла (также с завершающими символами новой строки)lines.index('yellow\n')
дает нам самый низкий индекс,lines
гдеyellow\n
находитсяlines[lines.index('yellow\n'):]
будет использовать нарезку списка, чтобы получить часть, начиная сyellow\n
концаjoin
объединит элементы списка для вывода в виде строкиисточник
yellow
в строке ... Также, если это не так, то нам нужно изменитьpython
grep
и не совпадает только с полными строками. Я проголосовал, кстати.Так как вопрос касается просмотра файла, всегда есть хорошая
источник
less
могу это сделать. Очень хорошо !