extract.sh: Script baseado no extract da phrack

Publicado por Marcos Paulo Ferreira (última atualização em 09/10/2010)

[ Hits: 5.616 ]

Homepage: http://daemoniolabs.wordpress.com

Download extract.sh

Download 1286311278.extract.sh (versão 2)




Para quem lia ou lê a phrack magazine já deve ter usado o programa extract lançado na revista
na edição #50 [1]. Esse programa é de grande utilidade, pois com ele podemos extrair conteúdos específicos
de um arquivo texto e salvá-los em um arquivo qualquer.

O conteúdo mencionado deve estar entre as tags <++> e <-->. O nome do arquivo de saída deve estar
após a tag <++> (obs: Pode-se utilizar diretórios também. Se eles não existirem, então serão criados.)

Confira um exemplo:

$ cat arquivo.txt
aaaaa
bbbbb
<++> saida.txt
1111
2222
3333
<-->
cccc
dddd

Utilizando o script:

$ ./extract.sh arquivo.txt
- Extracting saida.txt

Depois disso, o arquivo saida.txt será criado e seu conteúdo será:

$ cat saida.txt
111
222
333

[1] http://www.phrack.com/issues.html?issue=50&id=16

Espero que gostem.
t+

  



Versões atualizadas deste script

Versão 2 - Enviado por Marcos Paulo Ferreira em 03/10/2010

Changelog: É... parece que a regex para casar com as tags de abertura e fechamento não estava funcionando.
Não sei por quê, mas aqui em casa o script rodou sem problemas.

Bem, troquei a tag '<[+][+]>' para \<[+][+]\>, pois as versões recentes do bash não precisam das aspas para delimitar a regexp (e se você usar as aspas, o resultado será diferente :S ).

Outra coisa que mudei foi a robustez do script. Agora ele verifica alguns errinhos básicos que o script anterior não verificava.

Opa... fuçando pela net encontrei o Meleu Extracting Utility que faz a mesma coisa que esse script aqui.
Para falar a verdade, eu nem peguei o código do meleu para ler a fundo, mas posso garantir que o script tá bem diferente do meu e com muito mais esquemas interessantes :|

Página pessoal do meleu:
http://www.meleuzord.hpg.ig.com.br

Bem, acho que é isso!
t+

Download 1286311278.extract.sh


Esconder código-fonte

#!/bin/bash
#
# Autor: Marcos Paulo Ferreira (Daemonio)
# Contato: undefinido at gmail com
# 
# =[ Script : extract.sh ]=
# Dom Ago 22 13:43:09 BRT 2010 Inicio
# Seg Ago 23 00:34:38 BRT 2010 Fim da primeira versao
# Seg Ago 23 14:21:32 BRT 2010 Inclusao do read -r no while
#
# =[ Descricao ]=
# Extrai o conteudo delimitado entre as tags <++> e <-->
# de um arquivo texto. O nome do arquivo a ser salvo
# deve vir depois da tag <++>.
# Esse script foi baseado no extract.c da phrack #50.
#
# =[ Uso ]=
# $ ./extract.sh arquivo.txt
#
# =[ Exemplo ]=
# $ cat arquivo.txt
#   <++> saida.txt
#   111
#   222
#   333
#   <-->
# $ ./extract.sh arquivo.txt
#   - Extracting saida.txt
# $ cat saida.txt
#   111
#   222
#   333
#

extract() {
    while read -r LINE
    do
        # Procura pelo padrao <++> no inicio da linha
        if [[ $LINE =~ '^<[+][+]>' ]]
        then
            # Extrai o nome do arquivo ( tudo apos o <++> )
            FILENAME=${LINE#* }

            # Precisa criar diretorios?
            if [[ $FILENAME =~ '/' ]]
            then
                DIRNAME=${FILENAME%/*}
                mkdir -p $DIRNAME
            fi

            # Se arquivo existe, entao o deleta.
            [ -e "$FILENAME" ] && rm -f "$FILENAME" 2> /dev/null

            # Confere se e' possivel criar arquivo
            if ! touch $FILENAME 2> /dev/null
            then
                echo "Could not extract $FILENAME"
                exit 1
            fi

            echo "- Extracting $FILENAME"

        # Gravar no arquivo ate encontrar <-->
        else if ! [[ $LINE =~ '^<-->' ]]
        then
            echo -E "$LINE" >> $FILENAME
        fi
    fi
done
}

[ -z "$1" ] && echo "Usage: $0 <inputfile>" && exit 1

sed -n '/^<++>/,/^<-->/p' "$1" | extract

Scripts recomendados

Consulta operadora

SLAC - Programa de manutenção para Slackware 14x

Script para captura de campos de formulário com conversão URL encode.

Script para pegar ip WAN para firewall com uma ou mais links de internet

Socat Proxifier


  

Comentários
[1] Comentário enviado por Daemonio em 07/10/2010 - 08:06h

Caramba, o script não está funcionando. :/
A regex '<[+][+]>' não está casando com a linha por causa das aspas.
Estranho que em meu computador funcionou certinho.
(Deve ser porque eu estava usando o zsh enquanto programava em bash, sei lá.)

Bem, já enviei a correção e acrescentei mais coisinhas. Só esperar o vol aceitar.

Para quem realmente acha esse script útil, pode trocar direto no fonte as seguintes linhas:

1) Troque '<[+][+]>' por \<[+][+]\>
2) Troque '<[-][-]>' por \<[-][-]\>
(tire as aspas e escape o <>)

t+


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts