extract.sh: Script baseado no extract da phrack
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+
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+
Descrição
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+
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
#!/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
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+