Ayuda con Shell Scripting

Buenas he estado mirando varios manuales, entre ellos el de ZonaSiete.org (muy bueno por cierto, Ferdy) y pese a todo no he encontrado solución a mi problema.

El caso es que quiero probar a hacer un script que me indique el numero de aes que hay en fichero el caso es que no se como recorrer el fichero letra a letra, en vez de palabra a palabra.

A ver si alguien puede ayudarme.

Un saludo y gracias.
Jaime escribió:El caso es que quiero probar a hacer un script que me indique el numero de aes que hay en fichero el caso es que no se como recorrer el fichero letra a letra, en vez de palabra a palabra.


Lo primero que se me viene a la cabeza:

$ sed 's/[^a]//g' fichero.txt


Esto devolvería todas las 'aes' que contiene el fichero (y también los cambios de línea). Nada que no se pueda resolver con wc.
Guay, pero ahora tengo el problema que en vez de a debe ser $1 y no se como introducirlo en el comando sed.

Un saludo y gracias.

EDIT: Solucionado
sed 's/[^'$1']//g' fichero.txt


Mil gracias.

EDIT2: ¿Hay alguna forma de que sed también me quite los saltos de línea?
Lo he acabado ya quitándole al número de caracteres el número de líneas, pero es para evitar un comando más.

Otra cosa: ¿cómo puedo hacer un bucle for que recorra los parámetros de entrada a partir del 2?

Estoy muy pez en esto, siento tantas preguntas.

Un saludo.
hola Jaime, así a botepronto se me ocurre, una solucion, la mas facil si cabe, hacer un shift antes del for, esto hará que el $2 pase a ser $1, el $3, pase a ser $2... i así consecutivamente, date cuenta que entonces pierdes $1!!!!!!!! Si te interesa guardarlo pues yo haría

variable=$1
shift
for ..............

Saludos!!
Jaime escribió:¿Hay alguna forma de que sed también me quite los saltos de línea?


No, por su naturaleza. sed lee línea a línea, así que no elimina los saltos de línea.

En realidad hay formas, pero me parece un poco engorrosas (y no sé si lentas):

$ sed ':vuelta;$!N;s/[^a]//g;$!bvuelta' fichero.txt


Eso te eliminaría todos los retornos de carro excepto el de la última línea (que es imposible). Así que bastaría con restar siempre 1. Algo así:

$ echo $((`sed ':vuelta;$!N;s/[^a]//g;$!bvuelta'` - 1)) fichero.txt


Otra opción es volver a filtrar con "tr":

$ sed 's/[^a]//g' | tr -d "
"


Pero lo más inteligente habría sido recurrir desde un principio a tr (ya te advertí que te dije lo primero que me vino a la cabeza):

$ tr -cd "a" fichero
4 respuestas