Por conta de um problema que tive na empresa onde trabalho, criei este script que pode ser útil para quem tiver um problema semelhante ou simplesmente para aqueles que querem aprender um pouco sobre shell script.
Há alguns dias o departamento de contabilidade da empresa
onde trabalho trouxe um problema até nós, eles necessitavam
que determinadas linhas de um arquivo X fossem excluídas e
a relação das linhas a serem apagadas estavam em um arquivo Y.
Logo, alguns pensaram em apagar manualmente e outros em criar
complexos programas para realizar a tarefa. Tentei imaginar
uma solução simples e rápida, que desobrigaria os usuários de
realizar a penosa tarefa de apagar uma a uma as linhas do
arquivo e nos livrar da complexidade de desenvolvimento e
manutenção de um programa mais completo. A primeira coisa que
me veio a cabeça foi criar um "Shell Script".
Bem, este é um programa bem simples, que além de servir a
finalidade citada anteriormente, tem um propósito educacional.
Para o pessoal que quer aprender "Shell Scripting", acredito
que este seja um bom exemplo, pois fiz uso de vários recursos
interessantes, como variáveis, passagem de parâmetros, loops,
estruturas condicionais, "PIPEs" e expressões regulares, etc.
Eis o código:
#!/bin/sh
###################################################
# Line Delete
# (C) Copyleft 2005 Carlos "Null_Terminated" Andre
# null_terminated{no spam}linuxmail.org
# Usage: ./linedel.sh <lines> <data>
###################################################
TMP=${TMP:-/tmp}
BKP=`echo $2 | sed -e 's/\...*$//'`
WFILE=${TMP}/${BKP}$$
SCRPT=${TMP}/script$$
if [ $# -lt 2 ]; then
echo "Usage $0 <lines> <data>"
exit 1
fi
rm -f $SCRPT
for y in `cat $1`; do
echo "${y}d" >> $SCRPT
done