Script para añadir una linea en un archivo desde la terminal de linux

Descargar aqui: http://bit.ly/2ju8xyO

Con este script sencillo podrás añadir o reemplazar líneas dentro de cualquier fichero.

Viene con muchas opciones y con un menú de ayuda para poder entender mejor su funcionamiento.

Para ver el menu de ayuda ejecutar el siguiente comando
./add_line.sh --help




#funciones
function ayuda {
echo ""
echo "Programa que permite añadir/sobreescribir lineas de un fichero de una forma sencilla."
echo ""
echo "Usage:"
echo $'\t'"./add_line.sh -f|--file Ruta_Archivo -t|--text texto_nuevo"
echo ""
echo "Options:"
echo $'\t'"[-h|--help] "$'\t'""$'\t'" Muestra el siguiente mensaje de ayuda."
echo $'\t'"[-e|--end] "$'\t'""$'\t'" Añade las nuevas líneas en la última posición."
echo $'\t'"-f|--file file "$'\t'""$'\t'" Archivo dónde se debe incluir la nueva línea."
echo $'\t'"[-l|--line num_linea] "$'\t'" Línea donde se va a añadir el nuevo texto. (default = 0)"
echo $'\t'"-t|--text text "$'\t'""$'\t'" Texto que se quiere insertar."
echo $'\t'"[-o|--output file] "$'\t'" Fichero donde se guardará el resultado. (default = file origen) "
echo $'\t'""$'\t'""$'\t'""$'\t'" Cuidado, con este argumento se sobreescribe el fichero en caso de existir."
echo $'\t'"[-r|--replace] "$'\t'""$'\t'" No añade una linea nueva, reemplaza una que existe."
echo ""
echo "En caso de querer añadir más de una línea, debes separarlas por '\n'"
echo $'\t'"Ejemplo:   "$'\t'"\"linea\nLinea otra\""
echo $'\t'"Resultado:"$'\t'"..."
echo $'\t'"          "$'\t'"linea"
echo $'\t'"          "$'\t'"Linea otra"
echo $'\t'"          "$'\t'"..."
echo ""
echo ""
}

# Mientras el número de argumentos NO SEA 0
while [ $# -ne 0 ]
do
    case "$1" in
    -h|--help)
        ayuda
exit 2
        ;;
    -f|--file)
        ARCHIVO=$2
        shift
        ;;
    -l|--line)
        LINEA=$2
        shift
        ;;
    -t|--text)
        TEXTO=$2
shift
        ;;
-e|--end)
FINAL=1
;;
-o|--output)
OUTPUT=$2
shift
;;
-r|--replace)
REPLACE=1
;;
    *)
        echo "add_line: illegal option -- $1."
ayuda
        exit 2
        ;;
    esac
    shift
done

if [ -z "$ARCHIVO" ]
then
    echo "El archivo el obligatorio (-f file)."
ayuda
exit 2
fi
if [ -d $ARCHIVO ]; #si el archivo no existe
then
echo "El archivo debe existir (-f file)."
ayuda
exit 2
fi
if [ -z "$LINEA" ]
then
if [ -z "$FINAL" ]
then
#echo "El numero de linea por defecto es la primera linea."
#echo ""
LINEA=0
fi
fi
if [ -z "$TEXTO" ]
then
    echo "El texto de la nueva linea es obligatorio (-t text)."
ayuda
exit 2
fi

#ejecucion correcta del programa
if [ -z "$OUTPUT" ] #si has elegido un archivo donde guardar el nuevo, si no por defecto es el mismo que el origen
then
ARCHIVO_SALIDA=$ARCHIVO
else
ARCHIVO_SALIDA=$OUTPUT
fi

if [ -z "$FINAL" ] # si no quieres añadirlo al final
then
RUTA_AUX="$ARCHIVO.aux"
cp $ARCHIVO $RUTA_AUX
if [ -d $ARCHIVO_SALIDA ]; #si el archivo no existe no lo tiene que eliminar
then
rm "$ARCHIVO_SALIDA"
fi
head -$LINEA $RUTA_AUX > $ARCHIVO_SALIDA 
printf "$TEXTO\n" >> $ARCHIVO_SALIDA
if [ $REPLACE -eq 1 ] #En caso de que se quiera remplazar la linea
then
LINEA=$( expr $LINEA + 1 )
fi
sed '1,'${LINEA}'d' $RUTA_AUX >> $ARCHIVO_SALIDA
rm "$RUTA_AUX"
else
printf "$TEXTO\n" >> $ARCHIVO_SALIDA #en caso de querer añadirlo al final
fi

cat $ARCHIVO_SALIDA #muestra el resultado
exit 0