Найти определенный шаблон в текстовом файле и исключить их из вывода?

Мой сделал то же самое. Вы случайно не пытались установить обновления, используя функцию обновления в Gnome?

В любом случае, вот что исправило это для меня:

  1. Загрузитесь в GRUB (или любой другой системный загрузчик, который вы используете), и отредактируйте командную строку ядра так, чтобы она имела systemd.unit=graphical.target. Затем дайте ему загрузиться, используя новые параметры.

  2. GDM должен запуститься, и вы сможете войти в систему как обычно.

  3. Когда вы перезагружаетесь, он должен быть распакован.

Я не знаю , но моя гипотеза состоит в том, что функция обновления временно изменяет цель загрузки по умолчанию, и цель обновления каким-то образом загромождает.

1
20.02.2018, 20:39
3 ответа

Awksolución:

awk '/^zone /{ 
         if (f) print r;
         r = $0; f = 0; next 
     }
     { r = r ORS $0; if (/^[^*]* pwwn/) f = 1; }
     END{ if (f) print r }' file

La ​​salida:

zone name tommy
* pwwn xxxxxxxx
  pwwn xyzabcda
* pwwn xcvuytnm
zone name angelfalls
* pwwn xxxxxxxx
  pwwn xyzabcda
zone name Newyork
* pwwn xxxxxxxx
  pwwn xyzabcda
3
27.01.2020, 23:23

Así es como haría esto como una tubería perl rápida:

perl -p00e 's/\nzone/\n\nzone/g' inputfile \
| perl -n00e '$t = $_; s/^\*.*?\n//mg; print $t if /pwwn/' \
| perl -p00e 's/\n\n/\n/'

La primera línea agrega una línea en blanco entre cada registro. La segunda línea itera sobre cada registro, verificando si quedan líneas pwwndespués de eliminar todas las líneas que comienzan con *dentro de ese registro --y, de ser así, imprime ese registro. La tercera línea elimina las líneas en blanco que separan cada registro.

0
27.01.2020, 23:23
$ awk -v RS='(^|\n)zone' '/\n[^*]/ { print "zone" $0 }' input 
zone name tommy
* pwwn xxxxxxxx
  pwwn xyzabcda
* pwwn xcvuytnm
zone name angelfalls
* pwwn xxxxxxxx
  pwwn xyzabcda
zone name Newyork
* pwwn xxxxxxxx
  pwwn xyzabcda

Esta secuencia de comandos awkestablece el Separador de registros(RS)al comienzo del archivo de entrada o una nueva línea, seguido de la palabra "zona". Luego imprime cada "registro" que contiene al menos una nueva línea no seguida por un *.

Tiene que imprimir la palabra "zona" junto con $0porque awkelimina automáticamente RSde cada registro de entrada.

NOTA :Debido a que RSno es solo una nueva línea en sí misma, $0contiene las nuevas líneas al final de cada línea de entrada (, esto está muy relacionado con la razón mencionada anteriormente por qué " zone" tiene que ser impreso ). Esto significa que habrá una línea en blanco adicional al final de la salida. Si esto es un problema, la forma más fácil de deshacerse de él es con sed. p.ej.

awk -v RS='(^|\n)zone' '/\n[^*]/ { print "zone" $0 }' input | sed '$d'

Finalmente, si pwwnes una parte importante de los criterios de coincidencia, cambie la coincidencia de expresión regular en el script de /\n[^*]/a /\n[^*] pwwn/. (con la entrada de muestra dada, la salida es idéntica, pero puede diferir con su entrada real mucho más grande)

0
27.01.2020, 23:23

Теги

Похожие вопросы