Descrever a estrutura do arquivo é importante para não precisar ficar chutando possíveis soluções. Exemplos simplificando o problema são sempre muito úteis.
Já que o 'egrep' do rai3mb não funcionou ... aqui vai uma tentativa com o sed:
$ sed '/create database/,/unlock tables/!d' arquivo.sql
5. Re: Cortar Trecho de Arquivo
rai3mbusa Outra
Post recolhido
Enviado em 13/12/2014 - 18:18h
ricardoschet escreveu:
Não funcionou :(
Descreva o que aconteceu com mais detalhes, poste seu arquivo de exemplo e comando que executou.
6. Re: Cortar Trecho de Arquivo
AprendiNoLinuxusa Ubuntu
Post recolhido
Enviado em 17/12/2014 - 08:30h
Tanto egrep do rai3mb, quanto o sed do textmode funcionam pra mim...
O que falhou ?
7. Re: Cortar Trecho de Arquivo
ricardoschetusa Debian
Post recolhido
Enviado em 17/12/2014 - 09:53h
AprendiNoLinux2 escreveu:
Tanto egrep do rai3mb, quanto o sed do textmode funcionam pra mim...
#!/bin/bash
#: filtrando.sh
#: Vai filtrar comandos sql.
#: Há várias formas de fazer.
#: Poderia usar sed, mas vai de while rsrs.
#
#:##########################################################################
#: Problemas conhecidos
#:##########################################################################
#: Se comando for minúsculo em algum caso vai falhar.
#: Se UNLOCK TABLES não for encontrado, vai falhar.
#: Se comando estiver todo em uma linha vai falhar.
#:##########################################################################
# Variáveis dos comandos de abertura e fechamento.
g_Prefixo="CREATE TABLE"
g_sufixo="UNLOCK TABLES"
g_arquivo_dados="meutexto.txt"
g_arquivo_saida="comandos.txt"
# Apagando arquivo de saída caso exista.
rm -rf "$g_arquivo_saida"
# Lê arquivo com while porque quero a linha toda.
if [ -f "${g_arquivo_dados}" ]; then
i=0
lc_iniciar=" "
while read line
do
let i++
if ! [ "${line}" == "" ]; then
# Tem conteúdo, vamos saber o que é.
lc_linha_atual="${line}"
# Monta String com base em CREATE TABLE
# POG (Correto seria pegar o tamanho da var.
# Fica como exercício futuro se você quiser arrumar.
lc_chk_prefix=$( echo "${lc_linha_atual:0:12}" )
lc_chk_sufix=$( echo "${lc_linha_atual:0:13}" )
# Confere se o prefixo é igual a var de controle.
# Se for, vai dizer SIM para inicialiar gravação.
if [ "$lc_chk_prefix" == "$g_Prefixo" ]; then
lc_iniciar="SIM"
fi
# Enquanto a var for SIM, vai gravar o arquivo.
if [ "$lc_iniciar" == "SIM" ]; then
echo "$lc_linha_atual" >> "$g_arquivo_saida"
fi
# Se encontrar o comando de fechamento, vai inicializar o controle
if [ "$lc_chk_sufix" == "$g_sufixo" ]; then
lc_iniciar=" "
fi
fi
done < "$g_arquivo_dados"
else
echo " Não encontrou arquivo $g_arquivo_dados "
read -t 5
exit 45
fi