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: Julio C. Neves
Subject: Re: [shell-script] Comparando registros.
Date: Wed, 7 Mar 2012 08:37:29 -0300

Deve ser mais fácil migrar para um S.O. que realmente mereça ser chamado do
S.O. ... ;)

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 6 de março de 2012 20:52, Rodrigo Boechat <
address@hidden> escreveu:

> **
>
>
> 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]
>
>  
>


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



reply via email to

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