authpriv является отдельным блоком для маршрутизации сообщений авторизации к файлу журнала, который больше ограничил полномочия, что те из подлинной Другой ОС отправят различные сообщения автору по сравнению с authpriv.
Я не уверен, насколько структурированный Ваши данные всего лишь, если это - как Вы показываете, как насчет следующего:
grep -B2 'Auto-Installed: [^1]'
Это предполагает, что каждая строка файла конфигурации включает Auto-Installed
строка, которая не могла бы быть корректной.
Вот awk программа, которая я думаю, делает точно, как Вы попросили.
awk 'BEGIN{deleted=3}
!deleted{printf "%s",l[NR%3]}
deleted {--deleted}
{l[NR%3]=/./?$0"\n":$0}
/Auto-Installed: 1/{deleted=3}
END{for(i=NR+deleted;i<NR+3;++i)printf "%s",l[i%3]}'
Я думаю, что это сделает ya
sed ':a
$!N # slurp
/Auto-Installed: 1/s/.*// # kill all buffered on match
$!{/\n.*\n/{P;D}} # P/D any third line, D cycles w/o read
$!ba # if no P/D, cycle w/o read anyway
'
grep -v "^$"
впоследствии избавиться от них. 73% сценариев делают то, что более легко/более лениво.
– slm♦
18.11.2013, 05:48
Вместо того, чтобы даже пытаться иметь дело с исключением их, почему не только выбирают противоположные строки, которые, оказывается, то, что Вы хотите так или иначе?
$ grep -B 2 "Auto-Installed: 0" data.txt
Package: transfig
Architecture: amd64
Auto-Installed: 0
Если требуется использовать grep
но с помощью логики для приближения к проблеме, где Вы исключаете разделы, которые содержат "Автоустановленный: 1 дюйм я не придумал этот подход с помощью средства PCRE в GNU grep.
$ grep -B2 -P 'Auto-Installed: (?!1)' data.txt
$ grep -B2 -P 'Auto-Installed: (?!1)' data.txt
Package: transfig
Architecture: amd64
Auto-Installed: 0
Вышеупомянутое использует предварительную функцию Perl, (?!..)
. Это позволяет нам делать поиск соответствия строк, которые не содержат значение 1, после Auto-Installed:
. Мы затем говорим grep
отобразить 2 строки (-B2
) к тому времени "соответствие".
То, что Вы имеете, является на самом деле записями, разделенными пустыми строками. Вместо того, чтобы кодировать некоторый хрупкий парсинг, который зависит от порядка и количества строк, используйте инструмент как awk или жемчуг для обработки записей, разделенных пустыми строками (режим абзаца).
awk -F '' '! /^Auto-Installed: 1$/'
Auto-Installed: 0
появляется (который является детерминантом). Я пытаюсь построить упаковывать/автоустанавливать отношения (который является моей заключительной целью), где я интересуюсь записями, где Автоматический Установленный 0.
– Braiam
19.11.2013, 02:52
Auto-Installed: 0
действительно появиться. -F
с awk наборов пустого аргумента к режиму абзаца (это подобно коду Perl в ответе terdon).
– Gilles 'SO- stop being evil'
19.11.2013, 02:56
И вот является обязательный Perl путем:
perl -000ne 'print unless /Auto-Installed: 1/' file
Волшебство -000
, это включает режим абзаца Perl, который заставляет его разделить файлы на абзацы. Другими словами, записи разделяются двумя или больше последовательными \n
персонажи.
Это также распечатает пустую строку между записями, для избавлений, которых, Вы могли работать
perl -000ne 'print unless /Auto-Installed: 1/' file | grep .