$ 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 awk
establece 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 $0
porque awk
elimina automáticamente RS
de cada registro de entrada.
NOTA :Debido a que RS
no es solo una nueva línea en sí misma, $0
contiene 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 pwwn
es 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)
Проблема заключалась во внутреннем кард-ридере, который, по-видимому, также был подключен через USB.
По-видимому, это связано с:https://bugzilla.kernel.org/show_bug.cgi?id=201997
Не выяснил, что такое "usb1". lsusb
по-прежнему показывает те же устройства, что и раньше.