drizze
(usa Linux Mint)
Enviado em 12/01/2017 - 22:46h
Fiz um pequeno script para te ajudar:
#!/bin/bash
filename=$1
findpattern=$2
if [ -z "$filename" ]
then
echo "Falta parâmetro nome do arquivo"
exit 1
fi
if [ ! -z "$findpattern" ];
then
echo "Procurando por ${findpattern} em ${filename}"
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)"
if [ ! -z "$findline" ];
then
lineoffset=$((findline+4));
sed "${findline},${lineoffset}d" $filename
else
echo "${findpattern} não encontrado"
fi
else
echo "Falta parâmetro findpattern"
exit 1
fi
Explicação do script acima:
Vamos supor que você pegou o script e salvou como
deleta.sh.
O script exige 2 argumentos, o primeiro o
nome do arquivo e o segundo o
nome do usuário. Exemplo:
./deleta.sh backup celiorj94
Ele pegará o número da linha da primeira ocorrência, somará pela lineoffset (ver linha 18, variável lineoffset):
findline="$(cat ${filename} | grep ${findpattern} -n | head -n 1 | cut -d : -f 1)"
Seto o "lineoffset" (última linha a deletar):
lineoffset=$((findline+4));
E com o comando
sed, deleto as linhas específicas:
sed "${findline},${lineoffset}d" $filename
Será retornado todo o documento, com exceção das linhas do usuário, partindo de (ver linha 18, variável lineoffset):
## Play backup celiojr94
até
sleep 1
A ideia é substituir o arquivo antigo (
ANTES DE TESTAR, FAÇA BACKUP):
./deleta.sh backup celiojr94 > backup
É um pequeno script para estudos. Fique a vontade para aprimorá-lo ;)