Você pode fazer isso em awk
. Coloque o seguinte script em um arquivo e, em seguida, chame awk -v pattern=disk60 -f script_file data_file
:
found { buf = buf "\n" $0 }
/multipath *\{/ { buf = $0; found = 1 }
!found { print }
$0 ~ pattern { matched = 1 }
/\}/ {
if (matched) {
gsub(/\n/, "\n#", buf);
buf = "#" buf;
}
print buf "\n";
buf = "";
found = matched = 0;
}
Isso funciona da seguinte maneira: Se a linha contiver multipath
e uma chave de abertura, inicie um novo buffer e defina a variável found
. Contanto que found
seja verdadeiro, adicione a linha ao buffer. Se found
não for verdadeiro, imprima a linha imediatamente, pois estamos fora de um bloco interessante. Se a linha corresponder ao padrão que você está procurando ( disk60
no meu exemplo), defina a variável matched
. Finalmente, se a linha contiver uma chave de fechamento, verifique se matched
é true. Se sim, comente as linhas no buffer. Imprima o buffer e redefina as variáveis.