shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Comparando registros.


From: Rodrigo Boechat
Subject: Re: [shell-script] Comparando registros.
Date: Tue, 06 Mar 2012 20:52:03 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2

Valtoir,

Eu descobri a origem do erro.
Eis a primeira linha dos arquivos de registro:

Windows Registry Editor Version 5.00

Isso faz com que na primeira execução do while, o script execute a linha:

registroPadrao["$chavePadrao"]+="$linhaPadrao#;#"

Só que a $chavePadrao ainda não foi definida.
Não tem como criar um elemento de vetor de nome vazio; fato.

Beleza. O problema inicial foi resolvido. Agora...

Quando eu executei o script sem o erro tive o seguinte retorno no 
arquivo de resultado:

HKEY_LOCAL_MACHINE#;#
HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__#;#
HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__VBOXBIOS00000002#;#
HKEY_LOCAL_MACHINEHARDWAREACPIDSDTVBOX__VBOXBIOS#;#
HKEY_LOCAL_MACHINEHARDWAREACPI#;#
HKEY_LOCAL_MACHINEHARDWARE#;#
HKEY_LOCAL_MACHINEHARDWAREACPIDSDT#;#

Ou seja, tudo errado. A ideia da lógica até e válida, mas ainda não 
consegui entender porque não houve a concatenação de linhas.
Sem falar no fato da linha:

chaveUsada=${chaveUsada//\\/_barra_}

Não ter surtido efeito.
:(

Ainda não desisti da parada, porque acredito que vai ser maneiro termos 
uma solução correta com arrays associativos; para o futuro.


Bom.
A questão de criar um arquivo para cada chave descartei. Eu mesmo já 
tinha pensado nisso, mas nem comecei a mexer com isso justamente 
pensando no tamanho do IO gerado; desnecessário ao meu ver.
Imagine você gerar e comparar por volta de trinta mil arquivos, e 
deletá-los depois.
Sem falar que uma instalação de Office2007 aumentou o registro em mais 
de 10MB...
Imagine um registro com meses ou anos de uso e instalações...
@_@

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - - - - - - - - - - - -
Alysson,

Adaptei o script para agrupar em uma linha as chaves e seus registros, 
usando o sed que o Robson passou anteriormente.
Aparentemente, consegui obter o resultado esperado, mas ainda não vou 
comemorar porque quero realizar mais testes com outros arquivos de registro.
Ainda assim, estou feliz com o que aprendi até aqui e com o primeiro 
resultado "correto".

Bem. No zero hora de hoje para amanhã, instalarei uma nova maquina xp na 
minha vm a fim de fazer mais testes.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - - - - - - - - - - - -
Todos,

O resultado da bagaça é encontrado em:
http://pastebin.com/HVn8WRCw

*** Se alguém se interessar em testar também ou ajudar a resolver o 
problema usando arrays associativos, eu mando os dois arquivos 
[antes.reg e usado.reg] compactados para seu email pessoal. São os dois 
arquivos que eu usei como base para tudo isso.
A compactação deve ser boa, já que os arquivos são de texto.

Obrigado pela ajuda até aqui.

Grande abraço!
Rodrigo Boechat

Em 06-03-2012 16:25, Valtoir escreveu:
> Só por comentar, mesmo.
>
> Pensei em outra forma de resolver o problema: criar um arquivo para cada
> chave do registro, e colocar os valores dentro de cada arquivo. Algo como
>
> ------------------------------------
> sed -i 's#\\#.#g' $padraoUnix
>
> mkdir /tmp/PadraoUnix
>
> while read linhaPadrao; do
> if [ "${linhaPadrao:0:1}" == "[" ]; then
>   chavePadrao=${linhaPadrao#[}
> chavePadrao=${chavePadrao%]}
> touch /tmp/PadraoUnix/$chavePadrao
>   else
> echo $linhaPadrao>>  /tmp/PadraoUnix/$chavePadrao
> fi
> done<  $padraoUnix
>
> -----------------------------------
>
> Depois de fazer isso também com "UsadoUnix", mandar ver um diff nos
> diretórios cujos nomes de arquivos sejam as chaves de registro e seus
> conteúdos os registros em si. Não sei se fui claro, e meu exemplo acima não
> foi testado.
>
> Só acho uma ideia meio maluca devido ao i/o no sistema de arquivos, mas de
> qualquer forma é uma ideia.
>
> Valtoir
>
>
> Em 5 de março de 2012 16:46, Alysson Gonçalves de Azevedo<
> address@hidden>  escreveu:
>
>> **
>>
>>
>> $ cat arq.old
>> linha igual
>> linha velha
>> linha igual
>>
>> $cat arq.new
>> linha igual
>> linha nova
>> linha igual
>>
>> $ diff --changed-group-format='%>' --unchanged-group-format='' arq.new
>> arq.old
>> linha velho
>>
>> Depois é só redirecionar a saída.
>>
>> Tem um argumento do diff, --GTYPE-group-format=GFMT que funciona assim:
>> GTYPE pode ser old, new, changed, unchanged.
>> GFMT pode ser '%>' , '%<' ou '%=' (tem outras opções tb, mas vou ficar
>> nessas)
>>
>> melhor do que eu explicar um por uma, é melhor vc ir testando e vendo os
>> resultados (é mais fácil usar apenas um argumento de cada vez) exemplo
>> abaixo.
>>
>> $ diff --changed-group-format='%<' arq.new arq.old
>> linha igual
>> linha novo
>> linha igual
>> $ diff --changed-group-format='%>' arq.new arq.old
>> linha igual
>> linha velho
>> linha igual
>>
>>
>> Alysson Gonçalves de Azevedo
>> (11) 8491-7730
>>
>> Em 5 de março de 2012 13:48, Valtoir<address@hidden>  escreveu:
>>
>>
>>> Opa,
>>>
>>> Por acaso o erro não ocorre quando o registro é um hex? Se for, isso
>> ocorre
>>> porque registros hex não são gravados entre aspas. Por isso aquela linha
>>>
>>> sed 's#\\#barra#g;/^$/d;s#=hex#=\"hex#' $1
>>>
>>> Detalhe: a linha acima só coloca as aspas no início do registro :-P, as
>>> aspas finais, no exemplo que te dei, são colocadas naquele else lá
>> embaixo.
>>> Chamo essa técnica de e-gop, sigla para Extreme Gambiarra Oriented
>>> Programming. Ela não deve ser usada, estava com pressa quando escrevi. O
>>> ideal é usar o mesmo sed pra colocar as aspas finais.
>>>
>>> Alguém da lista com mais experiência em sed consegue te ajudar com isso
>>> (adequar o sed acima pra também colocar as aspas no final da linha).
>>>
>>> Vai repassando tuas experiências aí, o assunto me parece interessante. De
>>> qualquer forma, a (tentativa de) solução que te passei é meio maluca, mas
>>> talvez dê pra extrair alguma coisa dela,
>>>
>>> T+
>>>
>>> Valtoir
>>> Em 5 de março de 2012 13:17, Rodrigo Boechat<
>>> address@hidden>  escreveu:
>>>
>>>> **
>>>>
>>>> Júlio,
>>>> Obrigado pela resposta.
>>>>
>>>> O arquivo original não tem apenas duas ou três linhas de atributos,
>>>> abaixo do nome da chave.
>>>> Tem chave com 10 atributos...
>>>> Gostei da sua linha super simples, mas pra mim ficou complexo usá-la
>>>> numa situação dessas.
>>>> Também, em testes não consegui comparar os arquivos com um registro por
>>>> linha.
>>>>
>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>> Alysson,
>>>> Obrigado pela resposta.
>>>>
>>>> No consegui usar o "diff" para comparação de linhas, somente o "comm".
>>>> talvez tenha sido meu cansaço mental... Bem. Você poderia citar um
>>>> exemplo com "diff" para criar o arquivo 3.txt com conteúdo que há em
>>>> 2.txt que não existe em 1.txt?
>>>>
>>>>
>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>>
>>>> Robson,
>>>> Obrigado pela resposta.
>>>>
>>>> 1) Não é bem por aí... Eu trabalho em turno de revesamento.
>>>> Quando estou de 00h~08h, levo meu note para o trampo para ajudar passar
>>>> o tempo.
>>>> As vezes jogo, as vezes fico "shelleando", as vezes fico automatizando
>>>> planilhas de excel para o povo do adm... Essas coisas. ^_^"
>>>>
>>>> 2) Deu certo para o exemplo que passei, mas não para os arquivos de
>>>> registro.
>>>> Pesquisei e finalmente consegui entender o porque da bagaça não ter
>>>> funcionado.
>>>> Simples e complexamente, o raio do editor de registro do windows usa
>> uma
>>>> codificação de caractere diferente do ISO. Usa o "utf-16le" aí deu
>> muito
>>>> problema porque o as expressões com "^\[", por exemplo, não conseguiam
>>>> encontrar as linhas que começavam com "[".
>>>> Descobri esse comando abaixo:
>>>> $ file -i antes.reg
>>>> antes.reg: text/plain; charset=utf-16le
>>>>
>>>> Aí descobri como alterar a codificação de caractere:
>>>> $ iconv --from-code=utf-16le --to-code=UTF-8 antes.reg -o
>> antes.utf8.reg
>>>> Foi realmente complexo chegar nesse ponto, porque até eu lembrar da
>>>> possibilidade da codificação de caracteres, bati MUITA cabeça com
>>>> códigos, e mais códigos, e pesquisas, e pesquisas...
>>>> @_@
>>>>
>>>> Bem. No final das contas a solução de colocar as chaves e seus
>> atributos
>>>> em uma única linha, não deu certo.
>>>> Infelizmente, quando executei o "comm" com os dois arquivos ele
>> reclamou
>>>> que os arquivos não eram ordenados.
>>>> E até o dado momento, eu não consegui imaginar como ordenar igualmente
>>>> os dois arquivos, visto que um arquivo possui, por exemplo:
>>>> [A\MONTE\DE\COISA]
>>>> [C\MONTE\DE\COISA]
>>>>
>>>> E o outro:
>>>> [A\MONTE\DE\COISA]
>>>> [B\MONTE\DE\COISA]
>>>> [C\MONTE\DE\COISA]
>>>>
>>>> Desse jeito, mesmo usando o "sort" a coisa fica desordenada.
>>>> :(
>>>>
>>>>
>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>>
>>>> Valtoir.
>>>> Obrigado pela resposta!
>>>>
>>>> Bom. Baseado no script que você criou para gerar o array, fiz um
>> script,
>>>> mas quando eu o executo, ele apresenta erro nas linhas 31 e 41.
>>>>
>>>> http://pastebin.com/DkxY6a73
>>>>
>>>> $ ./diferencaRegistro.bash antes.reg usado.reg
>>>> ./diferencaRegistro.bash: linha 31: registroPadrao["$chavePadrao"]:
>>>> índice da matriz (array) incorreto
>>>> ./diferencaRegistro.bash: linha 41: registroUsado[$chaveUsada]: índice
>>>> da matriz (array) incorreto
>>>>
>>>> Até agora não consegui compreender o que eu fiz errado. E eu estou
>>>> evitando ao máximo realizar testes, já que o "antes.reg" tem 30,8MB!!!!
>>>> E o usado 40,2MB!!!! Olha que a única diferença de um pro outro é uma
>>>> instalação do Office2007.
>>>>
>>>> Hoje no meu zero hora eu testarei o seu script e estudarei um jeito de
>>>> aplicá-lo na comparação, caso o meu não tenha salvação.
>>>>
>>>> Grato a todos,
>>>> Rodrigo Boechat
>>>>
>>>> Em 29-02-2012 18:31, Valtoir escreveu:
>>>>
>>>>> Mais uma coisa: para listar o conteúdo dos arrays, rode a linha
>> abaixo:
>>>>> grep ^declare gerarray.sh | sed 's/declare -A /echo
>> \$\{/;s/$/[@]}/'>>
>>>>> gerarray.sh
>>>>>
>>>>> e depois rode o script gerarray.sh
>>>>>
>>>>> Valtoir
>>>>>
>>>>> Em 29 de fevereiro de 2012 18:03, Valtoir<address@hidden
>>>>> escreveu:
>>>>>
>>>>>> Boa tarde,
>>>>>>
>>>>>> Salve o script a seguir, depois rode-o passando como parâmetro o
>>> arquivo
>>>>>> de registro. Ele deve criar um outro script chamado gerarray.sh com
>> os
>>>>>> comandos para gerar os arrays.
>>>>>>
>>>>>> Rode por sua conta e risco ;-)
>>>>>>
>>>>>> ----------------------------------------------------------
>>>>>> #/bin/bash
>>>>>> rm gerarray.sh
>>>>>> rm lixo
>>>>>> sed 's#\\#barra#g;/^$/d;s#=hex#=\"hex#' $1>>  lixo
>>>>>> while read linha; do
>>>>>> if [ $(echo $linha | grep "^\[") ]; then
>>>>>> chave=$(echo $linha | grep "^\[.*\]" | sed 's#\[##;s#]##')
>>>>>> echo "declare -A $chave">>  gerarray.sh
>>>>>> else
>>>>>> echo $linha | grep -v "\"$"&&  linha=${linha}\"
>>>>>> echo ${chave}$( echo ${linha} | sed 's#^\"#[#;s#\"#]#')>>
>>>>>> gerarray.sh
>>>>>> fi
>>>>>> done<  lixo
>>>>>> chmod +x gerarray.sh
>>>>>>
>>>>>> ----------------------------------------------------------
>>>>>>
>>>>>> Antes que esqueça, ele substitui as contrabarras das chaves de
>>> registro
>>>>>> pela string "barra", já que a contrabarra em si gera erro ao tentar
>>>> criar
>>>>>> os arrays.
>>>>>>
>>>>>> T+
>>>>>>
>>>>>> Valtoir
>>>>>>
>>>>>>
>>>>>> Em 29 de fevereiro de 2012 11:41, Robson Alexandre<
>>>>>> address@hidden>  escreveu:
>>>>>>
>>>>>> **
>>>>>>> Rodrigo,
>>>>>>> deixe-me fazer algumas considerações antes de expor meu ponto de
>>> vista.
>>>>>>> 1º Dormir pra quê, não é mesmo. Vc me manda msg as 4:05 da manhã de
>>>>>>> uma madrugada de sexta pra sábado (Deve ter chegado da balada e
>>>>>>> enviado o email.).
>>>>>>> 2º Acredito que seu arquivo exemplo veio com as quebras de linha
>>>>>>> desconfiguradas graças ao gmail.
>>>>>>> Assim fica minha dúvida:
>>>>>>> As chaves dos registros começam com [HKEY...] e termina com \n\n?
>>>>>>> Partindo deste princípio podemos aplicar esse sed :
>>>>>>>
>>>>>>> sed -n 's/\[/}\n\[/g;$s/$/\n}/;p' $REG | sed -n
>>>>>>> '/\[/{:inicio;/}/!{N;binicio};s/\n//g;s/}//g;p}'
>>>>>>>
>>>>>>> Então coloquei no pastebin do jeito que acho que a formatação do
>>>>>>> arquivoo de registro deve estar
>>>>>>> http://pastebin.com/YjQ5dQMi
>>>>>>>
>>>>>>> Acredito que deve haver solução mais simples, mas o fator tempo não
>>>>>>> deixou aperfeiçoar a solução.
>>>>>>> A partir dai vc pode colocar [Registro]=Atributos,Atributos da
>> forma
>>>>>>> como vc achar conveniente.
>>>>>>> Eu estava esperando a solução com arrays, pois pretendo aplicá-la
>> em
>>>>>>> outro problema, por exemplo quando vc tem um csv e pra cada campo
>>>>>>> separado por ; vc quer atribuir uma variavel deum vez só e não
>>> fazendo
>>>>>>> infinitos cut -f -d pra cada variavel.
>>>>>>> Bom, veja ai e diga-nos o que acha.
>>>>>>>
>>>>>>> Att
>>>>>>> Robson Alexandre
>>>>>>>
>>>>>>> Em 26 de fevereiro de 2012 15:19, Julio C. Neves
>>>>>>> <address@hidden>  escreveu:
>>>>>>>
>>>>>>>> Se não conseguir implementar a dica do Alysson (de juntar tudo em
>>> uma
>>>>>>>> linha), outra coisa que vc poderia fazer seria:
>>>>>>>>
>>>>>>>> saida do comm | xargs -i grep -B2 {} arquivo
>>>>>>>>
>>>>>>>> Por falar em xargs, para juntar cada 3 linhas em uma (proposta do
>>>>>>> Alisson),
>>>>>>>> faça:
>>>>>>>>
>>>>>>>> cat arquivo | xargs -L3.
>>>>>>>> Abcs,
>>>>>>>> Julio
>>>>>>>> *Já foi lançado "Bombando o
>>>>>>>> Shell<
>> http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666
>>>>>>>> ". *
>>>>>>>> *Show **de interfaces gráficas sob Shell!*
>>>>>>>> *
>>>>>>>> *
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Em 25 de fevereiro de 2012 20:44, Rodrigo Boechat<
>>>>>>>> address@hidden>  escreveu:
>>>>>>>>
>>>>>>>>> **
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Júlio, boa noite!
>>>>>>>>> Obrigado pela resposta. Eu pensei nisso. Na verdade foi a
>> primeira
>>>>>>> coisa
>>>>>>>>> que imaginei.
>>>>>>>>> Mas caí num caso que não atendeu, ou que meu conhecimento
>> limitado
>>>> não
>>>>>>>>> soube solucionar.
>>>>>>>>> O "comm" compara linha por linha e mostra a linha diferente.
>>>>>>>>>
>>>>>>>>> O problema é o seguinte, digamos que o registro no padrão esteja
>>>> assim:
>>>>>>>>> [NOME\DA\CHAVE\00]
>>>>>>>>> "Atributo00"=dword:valor00
>>>>>>>>> "Atributo01"=dword:valor01
>>>>>>>>>
>>>>>>>>> Já no usado, tenho o seguinte:
>>>>>>>>> [NOME\DA\CHAVE\00]
>>>>>>>>> "Atributo00"=dword:VALOR10
>>>>>>>>> "Atributo01"=dword:valor01
>>>>>>>>>
>>>>>>>>> O registro "[NOME\DA\CHAVE\00]" é diferente entre o padrão e o
>>> usado,
>>>>>>>>> mas eu receberia apenas '"Atributo00"=dword:VALOR10' de retorno.
>>>>>>>>> A avaliação que preciso realizar, necessita do registro completo.
>>>> Nesse
>>>>>>>>> caso, preciso do retorno:
>>>>>>>>>
>>>>>>>>> [NOME\DA\CHAVE\00]
>>>>>>>>> "Atributo00"=dword:VALOR10
>>>>>>>>> "Atributo01"=dword:valor01
>>>>>>>>>
>>>>>>>>> Como meu conhecimento ainda é limitado, você saberia resolver o
>>> caso
>>>>>>> sem
>>>>>>>>> usar arrays?
>>>>>>>>>
>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
>> --
>>>> --
>>>>>>>>> -- -- -- -- -- -- -- -
>>>>>>>>> Fernando, boa noite!
>>>>>>>>> Obrigado pela resposta.
>>>>>>>>>
>>>>>>>>> Eu descobri isso tentando. Não entendi porque o shell não torna
>> um
>>>>>>>>> elemento de array em array; matriz.
>>>>>>>>> mas já que a coisa é assim, eu pesquisei e já até tinha achado
>>>>>>>>> explicações sobre arrays associativos:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>> http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20100120.php#.T0lbjl-oOCg
>>>>>>>>> Já conheço o meio de trabalhar com esse tipo de array, mas o que
>>> não
>>>>>>>>> consegui foi justamente, separar o registro e obter seus
>> atributos
>>> em
>>>>>>>>> uma única linha.
>>>>>>>>>
>>>>>>>>> Aproveitando o exemplo que dei para o Júlio, tentarei explicar
>>>> melhor.
>>>>>>>>> Registro padrão:
>>>>>>>>>
>>>>>>>>> [NOME\DA\CHAVE\00]
>>>>>>>>> "Atributo00"=dword:valor00
>>>>>>>>> "Atributo01"=dword:valor01
>>>>>>>>>
>>>>>>>>> chave='NOME\DA\CHAVE\00'
>>>>>>>>>
>>> atributo="\"Atributo00\"=dword:valor00\n\"Atributo01\"=dword:valor01"
>>>>>>>>> registroPadrao[$chave]=$atributo
>>>>>>>>>
>>>>>>>>> Eu não preciso, neste instante, saber especificamente o que está
>>>>>>>>> diferente na chave.
>>>>>>>>> Preciso apenas obter as chaves que possuem diferenças entre si.
>>>>>>>>>
>>>>>>>>> Assim fica super simples comparar as chaves do padrão com o
>> usado,
>>>> pois
>>>>>>>>> ambos possuirão os mesmos nomes de chaves.
>>>>>>>>> Eu faria algo assim:
>>>>>>>>>
>>>>>>>>> registroUsado[$chave] É IGUAL A registroPadrão[$chave]
>>>>>>>>>
>>>>>>>>> Se for diferente:
>>>>>>>>> echo $chave>>  arquivoDeSaida.txt
>>>>>>>>> echo $atributos>>  arquivoDeSaida.txt
>>>>>>>>>
>>>>>>>>> Meu problema é separar as chaves e colocar todos seus atributos
>>> como
>>>> um
>>>>>>>>> único valor no elemento correto do array associativo.
>>>>>>>>> Tentei vários SEDs na busca pela resposta, mas só tive retorno
>>>>>>> toscos...
>>>>>>>>> =/
>>>>>>>>>
>>>>>>>>> Grato,
>>>>>>>>> Rodrigo Boechat
>>>>>>>>>
>>>>>>>>> Em 25-02-2012 18:05, Julio C. Neves escreveu:
>>>>>>>>>> Será que com o uso do diff ou do comm vc não resolve essa
>>> trapalhada
>>>>>>> em
>>>>>>>>> uma
>>>>>>>>>> linha somente?
>>>>>>>>>>
>>>>>>>>>> Abcs,
>>>>>>>>>> Julio
>>>>>>>>>> *Já foi lançado "Bombando o
>>>>>>>>>> Shell<
>> http://www.brasport.com.br/index.php?dispatch=products.view&product_id=666
>>>>>>>>>> ". *
>>>>>>>>>> *Show **de interfaces gráficas sob Shell!*
>>>>>>>>>> *
>>>>>>>>>> *
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Em 25 de fevereiro de 2012 04:05, Rodrigo Boechat<
>>>>>>>>>> address@hidden>  escreveu:
>>>>>>>>>>
>>>>>>>>>>> **
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Pessoal, boa madrugada.
>>>>>>>>>>>
>>>>>>>>>>> Estou batendo cabeça com a seguinte situação:
>>>>>>>>>>> Tenho um arquivo de backup de registro do windows e preciso
>>>>>>> analisá-lo
>>>>>>>>>>> contra um registro "padrão" para verificar a diferença entre os
>>>>>>> dois.
>>>>>>>>>>> O que preciso e não estou conseguindo fazer é o seguinte:
>>> Pretendo
>>>>>>> criar
>>>>>>>>>>> um array "dicionário" com os nomes das chaves do registro e
>>>> atribuir
>>>>>>>>>>> como valor todos os atributos das chaves em uma única linha.
>>>>>>>>>>>
>>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>>>>>>>>> Exemplo de registro:
>>>>>>>>>>>
>>> [HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\1]
>>>>>>>>>>> # REGISTRO
>>>>>>>>>>> "Component
>>>>>>>>>>>
>> Information"=hex:00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,ff
>>> #
>>>>>>>>> ATRIBUTO
>>>>>>>>>>> "Identifier"="PCI"# ATRIBUTO
>>>>>>>>>>> "Configuration
>>>>>>>>>>>
>>> Data"=hex(9):05,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,05,\#
>>>>>>>>> ATRIBUTO
>>>>>>>>>>> 00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,02,10,01,01#
>>> ATRIBUTO
>>>>>>>>>>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FACS]# REGISTRO
>>>>>>>>>>>
>> "00000000"=hex:46,41,43,53,40,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\#
>>>>>>>>>>> ATRIBUTO
>>>>>>>>>>>
>>>>>>>>>>>
>> 00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,\#
>>>>>>>>>>> ATRIBUTO
>>>>>>>>>>> 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00# ATRIBUTO
>>>>>>>>>>>
>>>>>>>>>>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT]# REGISTRO
>>>>>>>>>>> # ATRIBUTO
>>>>>>>>>>> [HKEY_LOCAL_MACHINE\HARDWARE\ACPI\FADT\VBOX__]# REGISTRO
>>>>>>>>>>> # ATRIBUTO
>>>>>>>>>>>
>>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>>>>>>>>> Exemplo de resultado esperado:
>>>>>>>>>>> registros[NOME\COMPLETO\DO\REGISTRO]=TODAS AS LINHAS DE
>> ATRIBUTOS
>>>>>>>>>>> AGRUPADAS NUMA SÓ, INCLUINDO AS LINHAS EM BRANCO.
>>>>>>>>>>>
>>>>>>>>>>> - -- -- -- -- -- -- -- -- -- -- -- -- -- -- -
>>>>>>>>>>> Ficou fácil de compreender?
>>>>>>>>>>>
>>>>>>>>>>> Eu pretendo carregar dois arrays, um com o registro padrão e
>>> outro
>>>>>>> com o
>>>>>>>>>>> "usado" para passar para um txt tudo que estiver diferente do
>>>>>>> padrão ou
>>>>>>>>>>> não existir no padrão.
>>>>>>>>>>> Acredito que eu consiga com um while, mas nem consegui criar os
>>>>>>> arrays
>>>>>>>>>>> ainda.
>>>>>>>>>>>
>>>>>>>>>>> Bom, eu tentei seguir a ideia de um SED sinistro que o Robson
>>>>>>> Alexandre
>>>>>>>>>>> passou:
>>>>>>>>>>>
>>>>>>>>>>> for cmd in INSERT SELECT DELETE UPDATE
>>>>>>>>>>> do
>>>>>>>>>>> sed -n "/${cmd}/{:a;/;/! {N;ba};s/\n/ /g;p}" arq.txt>
>>> "${cmd}.txt"
>>>>>>>>>>> done
>>>>>>>>>>>
>>>>>>>>>>> Não tive sucesso, embora eu já consiga compreender a estrutura.
>>>>>>>>>>>
>>>>>>>>>>> Alguém poderia me ajudar?
>>>>>>>>>>>
>>>>>>>>>>> Grato,
>>>>>>>>>>> Rodrigo Boechat
>>>>>>>>>>>
>>>>>>>>>>> [As partes desta mensagem que não continham texto foram
>>> removidas]
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>> [As partes desta mensagem que não continham texto foram
>> removidas]
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ------------------------------------
>>>>>>>>>>
>>>>>>>>>> ----------------------------------------------------------
>>>>>>>>>> Esta lista não admite a abordagem de outras liguagens de
>>>> programação,
>>>>>>>>> como perl, C etc. Quem insistir em não seguir esta regra será
>>>> moderado
>>>>>>> sem
>>>>>>>>> prévio aviso.
>>>>>>>>>> ----------------------------------------------------------
>>>>>>>>>> Sair da lista: address@hidden
>>>>>>>>>> ----------------------------------------------------------
>>>>>>>>>> Esta lista é moderada de acordo com o previsto em
>>>>>>>>> http://www.listas-discussao.cjb.net
>>>>>>>>>> ----------------------------------------------------------
>>>>>>>>>> Servidor Newsgroup da lista: news.gmane.org
>>>>>>>>>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>>>>>>>>>
>>>>>>>>>> Links do Yahoo! Grupos
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> [As partes desta mensagem que não continham texto foram
>> removidas]
>>>>>>>>>
>>>>>>>>>
>>>>>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------
>>>>>>>>
>>>>>>>> ----------------------------------------------------------
>>>>>>>> Esta lista não admite a abordagem de outras liguagens de
>>> programação,
>>>>>>> como perl, C etc. Quem insistir em não seguir esta regra será
>>> moderado
>>>> sem
>>>>>>> prévio aviso.
>>>>>>>> ----------------------------------------------------------
>>>>>>>> Sair da lista: address@hidden
>>>>>>>> ----------------------------------------------------------
>>>>>>>> Esta lista é moderada de acordo com o previsto em
>>>>>>> http://www.listas-discussao.cjb.net
>>>>>>>> ----------------------------------------------------------
>>>>>>>> Servidor Newsgroup da lista: news.gmane.org
>>>>>>>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>>>>>>>
>>>>>>>> Links do Yahoo! Grupos
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------
>>>>>
>>>>> ----------------------------------------------------------
>>>>> Esta lista não admite a abordagem de outras liguagens de programação,
>>>> como perl, C etc. Quem insistir em não seguir esta regra será moderado
>>> sem
>>>> prévio aviso.
>>>>> ----------------------------------------------------------
>>>>> Sair da lista: address@hidden
>>>>> ----------------------------------------------------------
>>>>> Esta lista é moderada de acordo com o previsto em
>>>> http://www.listas-discussao.cjb.net
>>>>> ----------------------------------------------------------
>>>>> Servidor Newsgroup da lista: news.gmane.org
>>>>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>>>>
>>>>> Links do Yahoo! Grupos
>>>>>
>>>>>
>>>>>
>>>> [As partes desta mensagem que não continham texto foram removidas]
>>>>
>>>>
>>>>
>>>
>>> [As partes desta mensagem que não continham texto foram removidas]
>>>
>>>
>>>
>>> ------------------------------------
>>>
>>> ----------------------------------------------------------
>>> Esta lista não admite a abordagem de outras liguagens de programação,
>> como
>>> perl, C etc. Quem insistir em não seguir esta regra será moderado sem
>>> prévio aviso.
>>> ----------------------------------------------------------
>>> Sair da lista: address@hidden
>>> ----------------------------------------------------------
>>> Esta lista é moderada de acordo com o previsto em
>>> http://www.listas-discussao.cjb.net
>>> ----------------------------------------------------------
>>> Servidor Newsgroup da lista: news.gmane.org
>>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>>
>>> Links do Yahoo! Grupos
>>>
>>>
>>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]