Debian tiene páginas web de listas de paquetes bastante buenas en packages.debian.org , incluidas listas de metapaquetes. Por ejemplo,aquí está la lista de metapaquetes para Debian 9.
También debe consultar losmetapaquetes de tareas , definidos como conjuntos de paquetes para roles de servidor específicos o configuraciones de GUI para idiomas específicos.
если я правильно понял :-в вашем вводе есть выделенная строка с надписью «<START of block>
» и еще одна для «<END of block>
», и вы хотите напечатать этот блок (, включая эти 2 маркера? или нет? )если они оканчиваются на «You» в строке перед «<END of block>
»?
, затем:
awk -v regstart="<START of block>" -v regend="<END of block>" -v reglast="You" '
BEGIN { rem="we will remember a block between those regstart and regend markers, and only print it if the last line matches reglast"
remember=0; rem="by default we are not inside a block, so we do not remember lines until we match the regstart"
}
( $0 ~ regstart ) {
remember=1; nb=0;
}
( remember==1 ) {
line[++nb]=$0 ;
}
( $0 ~ regend ) {
remember=0; rem="we reached the end of block, we do not remember anymore the lines we see until next regstart"
if ( line[(nb-1)] ~ reglast ) {
## for(i=2;i<=(nb-1);i++) { rem="this version do NOT show the 2 marker lines"
for(i=1;i<=nb;i++) { rem="this version shows the 2 marker lines"
print line[i]
}
## print "" ; rem="uncomment this line if you want a separator lines between blocks"
}
}
'
Примечание1 :Я использую регулярные выражения для сопоставления начала, конца и последней строки, но вместо этого можно использовать "==" для сравнения точных строк.
Примечание 2 :часть печати :может измениться с 2 на nb -1, чтобы не отображать НАЧАЛО (, хранящееся в строке [1] )и КОНЕЦ (, хранящееся в строке [nb ] )строк.
Примечание3 :приведенный выше скрипт успешно обрабатывает все блоки и печатает только те, которые заканчиваются строкой, соответствующей "reglast". Т.е. печатает не один, а все совпадающие блоки.
Более короткий awk
вариант для входа ниже:
< infile awk -v RS='\n<END of block>' '$NF == "You" { print $0 RS }'
<START of block>
Hi
How
Are
You
<END of block>
<START of block>
thank
You
<END of block>
$NF
здесь (в соответствии с определеннымRS
(разделителем записей )для статической строки, которая заставляет нас разделять каждый блок на основе этого )указывает значение последней строки, поэтому, если оно равно Yes
строка, затем распечатайте этот блок и также верните обратно RS.
Входной файл:
<START of block>
Hi
How
Are
You
<END of block>
<START of block>
Hi
How
Are
not YOU
<END of block>
<START of block>
thank
You
<END of block>
<START of block>
welcome
to
Unix
<END of block>