Script con cut [Solucionado]

Hola a todos, estoy creando un script para sacar datos de un fichero, lo estoy haciendo con el comando "cut". He leido la guia pero sigo sin poder sacar lo que quiero.

Tengo un fichero con este formato:

<channel id="dgplus0.sp">1:0:1:76c0:40e:1:c00000:0:0:0:</channel> <!-- CANAL+ -->
<channel id="dgplus1.sp">1:0:1:76ca:40e:1:c00000:0:0:0:</channel> <!-- CANAL+ DOS -->
<channel id="dgplus2.sp">1:0:1:7479:3f0:1:c00000:0:0:0:</channel> <!-- CANAL+ ...30 -->
<channel id="dgplus3.sp">1:0:1:7472:3f0:1:c00000:0:0:0:</channel> <!-- C+ ACCIÓN -->
<channel id="dgplus4.sp">1:0:1:7473:3f0:1:c00000:0:0:0:</channel> <!-- C+ COMEDIA -->
<channel id="dgplus5.sp">1:0:1:7474:3f0:1:c00000:0:0:0:</channel> <!-- C+ DCINE -->
<channel id="dgplus7.sp">1:0:1:779c:424:1:c00000:0:0:0:</channel> <!-- C+ FÚTBOL -->
<channel id="dgplus8.sp">1:0:1:779d:424:1:c00000:0:0:0:</channel> <!-- C+ DEPORTES -->
<channel id="dgplus12.sp">1:0:1:77c0:40a:1:c00000:0:0:0:</channel> <!-- TVE 1 -->
<channel id="dgplus13.sp">1:0:1:77c2:40a:1:c00000:0:0:0:</channel> <!-- LA 2 -->

Lo que quiero es guardar en variables estos trozos (primera linea):

dgplus0.sp
76c0
CANAL+

He creado un script que me lo va haciendo pero me falta quitar los ultimos caracteres, y no se como hacerlo:

#!/bin/bash

while read A;
do

# Guarda el ID de XML
xmlid=`echo $A | cut -f1 -d ":" | cut -f2 -d "=" | cut -f1 -d ">" | cut -c 2-`
echo $xmlid

# Guarda el nombre del canal
canal=`echo $A | cut -f2 -d "!" | cut -c 3-`
echo $canal

# Guarda el SID en hexadeciml
sid_hex=`echo $A | cut -f4 -d ":"`

echo " "

done < $1

Con esto me sale esto:

$ ./hex2.sh file_canales.txt
dgplus0.sp"
CANAL+ -->

dgplus1.sp"
CANAL+ DOS -->

dgplus2.sp"
CANAL+ ...30 -->

dgplus3.sp"
C+ ACCIÓN -->

dgplus4.sp"
C+ COMEDIA -->

dgplus5.sp"
C+ DCINE -->

dgplus7.sp"
C+ FÚTBOL -->

dgplus8.sp"
C+ DEPORTES -->

dgplus12.sp"
TVE 1 -->

dgplus13.sp"
LA 2 -->

Pero lo que quiero es que me slga esto:

$ ./hex2.sh file_canales.txt
dgplus0.sp
CANAL+

dgplus1.sp
CANAL+ DOS

dgplus2.sp
CANAL+ ...30

dgplus3.sp
C+ ACCIÓN

dgplus4.sp
C+ COMEDIA

dgplus5.sp
C+ DCINE

dgplus7.sp
C+ FÚTBOL

dgplus8.sp
C+ DEPORTES

dgplus12.sp
TVE 1

dgplus13.sp
LA 2

Lo que me falta es quitar los ultimos caracteres.

¿Como lo puedo hacer?

¿Lo podria hacer sin cut y mas sencillo?

Muchas gracias por vuestra ayuda.

Saludos y hasta pronto.

o con AWK o con un regexp de perl, más fácil awk, más efectivo perl (una vez que te curres el regexp)

Muchas gracias a los dos, al final lo he hecho con "sed" con la guia de la misma pagina: http://enavas.blogspot.com/2008/03/el-shell-de-linux-comando-sed.html

Con estos cambios ya tengo lo que queria:

xmlid2=`echo $xmlid | sed 's/"//'`
canal2=`echo $canal | sed 's/ -->//'`

Muchas gracias por todo y hasta pronto.

Saludos.

Ah, otra cosa, ¿como puedo hacer para que el fichero lo configure en el script?

Ahora lo ejecutaba asi:

./hex.sh file_canales.txt

Y dentro tenia algo asi:

while read A;
do
### aqui va el script
done < $1

¿Es posible configurar el nombre y la ruta del fichero dentro del script?

Hasta pronto!

usa variables

miruta='/home/yo/la/ruta/'

echo $miruta

observa que no hay espacios en blanco junto al =

pvaldes escribió:

usa variables

miruta='/home/yo/la/ruta/'

echo $miruta

observa que no hay espacios en blanco junto al =

Perfecto!!!

Muchas gracias, funciona perfecto.

Saludos y hasta pronto, lo marco como solucionado.