Extrai uma string localizada acima e mais próxima do padrão correspondente em uma saída multilinha

0

Abaixo está o comando ssacli da HP para ver os detalhes do RAID de hardware configurado:

ssacli ctrl slot=0 show config

e sua saída é como abaixo:

HPE Smart Array P408i-a SR Gen10 in Slot 0 (Embedded)



   Internal Drive Cage at Port 1I, Box 1, OK



   Internal Drive Cage at Port 2I, Box 0, OK


   Port Name: 1I (Mixed)

   Port Name: 2I (Mixed)

   Array A (Solid State SAS, Unused Space: 0  MB)

      logicaldrive 1 (447.10 GB, RAID 1, OK)

      physicaldrive 1I:1:1 (port 1I:box 1:bay 1, SAS SSD, 480 GB, OK)
      physicaldrive 1I:1:2 (port 1I:box 1:bay 2, SAS SSD, 480 GB, OK)

   SEP (Vendor ID HPE, Model Smart Adapter) 379  (Port: Unknown)

Eu tenho que descobrir o Array nome para excluí-lo, procurando as informações de disco correspondentes que eu recebo como entrada do usuário. Por exemplo, se a entrada do disco for 1I: 1: 1 , eu terei que procurar essa string na saída do comando acima. Como esse disco está disponível e correspondente, tenho que extrair o nome da Matriz (aqui é ' A ') e assim que obtenho esse parâmetro da Matriz, posso excluir a configuração RAID existente.

ssacli ctrl slot=0 show config | grep -B 4 '1I:1:1' | grep Array | awk '{print $2}'

O problema com o comando acima é

  • O valor 4 no grep -B não pode ser sempre constante, pois o disco correspondente pode vir em primeiro, segundo ou terceiro, etc., sob uma matriz na saída.

  • pode haver várias configurações de matriz RAID disponíveis na saída, então pode haver Array A , B , C etc ., Tenho que encontrar e recuperar a string " Array " mais próxima que corresponde ao meu disco de entrada

por Ibrahim Quraish 27.06.2018 / 16:15

1 resposta

1

O seguinte perliner oneliner lê o arquivo linha por linha, registrando o último array até encontrar a linha com a unidade física '1I: 1: 1':

ssacli ctrl slot=0 show config | perl -ne 'if ($_ =~ /Array (.)/) { $array = $1; } elsif ($_ =~ /physicaldrive 1I:1:1/) { print $array; exit; }'
    
por 27.06.2018 / 16:51