Intereting Posts
Как запустить freecell, установленную из программного центра Проблема с драйвером Nvidia GT730 с Ubuntu 16.04 Я удалил исходную учетную запись пользователя. У новой учетной записи нет пароля. Как я могу включить его? Как люди смогут перейти с 12.10 на более поздние версии после 13.04, это EOL? Ошибка загрузки juju в локальной среде – Не удалось установить службу mongo Как я могу увеличить количество файлов, запоминаемых GIMP? / dev / kvm не найден на Ubuntu 14.04 Нет доступа к сети из-за WLAN0: AVAHI Использование установки 12.04 в качестве постоянного ручного привода Невозможно выполнить двоичный файл. Ошибка формата Exec Невозможно изменить цвет графического интерфейса после обновления до Lubuntu 14.04 i386 Ошибка: svn: невозможно создать каталог .svn ': Permission denied UTouch все еще используется или находится в разработке? / var / www для доступа apache2 и ftp Как удалить тему Gnome (включая GNOME Classic)?

Мне нужна помощь с Грепом, чтобы начать с раздела

У меня есть текстовые файлы, из которых я хочу grep отредактировать код. Цель, которую я пытаюсь достичь, – начать просмотр на определенной строке и затем прочитать что-нибудь ниже. Например. В приведенном ниже тексте, как просмотреть текстовый файл в начальной точке желтого. Я хочу просмотреть содержимое «желтого», а также все, что под ним, независимо от того, что это за контент.

green blue cyan magenta purple brown yellow red orange more orange more blue this is enough 

AWK Используйте AWK – это самый простой способ:

 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 , --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') для 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') для 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() 

Вы можете это сделать:

 awk '/yellow/{f=1}f' file 

где «файл» – это имя файла, содержащего ваш текст.

Не grep , но используя sed :

 sed -n '/^yellow$/,$p' file 
  • -n : запрещает печать
  • /^yellow$/,$ : диапазон адресов, который идет от первого появления строки, соответствующей точно yellow до последней строки включительно
  • p : печатает строки в диапазоне адресов
 % sed -n '/^yellow$/,$p' file yellow red orange more orange more blue this is enough 

Поздно на вечеринку 🙂

Использование grep :

 grep -Pzo '(?s)\n\Kyellow\n.*' file.txt 
  • -P позволяет использовать Perl-совместимое Regex

  • -z делает входной файл разделенным с помощью ASCII NUL, а не для новой строки

  • -o принимает только желаемую часть

  • (?s) является модификатором DOTALL, позволяет нам сопоставлять newline с использованием токена . (любой символ)

  • В \n\K , \n соответствует новой строке, \K отбрасывает совпадение

  • yellow\n.* совпадает с yellow за которым следует новая строка, и все после этого также выбирается и отображается на выходе.

Пример:

 % grep -Pzo '(?s)\n\Kyellow\n.*' file.txt yellow red orange more orange more blue this is enough 

Использование небольшого python :

 #!/usr/bin/env python2 with open('file.txt') as f: lines = f.readlines() print ''.join(lines[lines.index('yellow\n'):]) 
  • lines – это список, содержащий все строки файла (с завершающим символом перевода строки)

  • lines.index('yellow\n') дает нам самый низкий индекс lines где найден yellow\n

  • lines[lines.index('yellow\n'):] будет использовать нарезку списка, чтобы получить часть, начинающуюся с yellow\n до конца

  • join присоединяется к элементам списка для вывода в виде строки

Поскольку вопрос относится к просмотру файла, всегда есть хороший ol '

 less +/yellow file