Les comparto esta información acerca de el uso del comando "sed", que puede servir tanto para mostrar información de archivos , como para sustituir cadenas de texto en los mismos.
MOSTRANDO SALIDA ESTANDAR
Expresiones regulares:
^ Apunta al comienzo de la línea
$ Apunta al final de la línea
. Apunta a un único carácter
* Apunta a cero o más ocurrencias del carácter previo
[ ] Apunta a todos los caracteres entre los corchetes
Ejemplos con expresiones regulares:
/./ Apuntará a cualquier línea que contenga al menos un carácter
/../ Apuntará a cualquier línea que contenga al menos dos caracteres
/^#/ Apuntará a cualquier línea que comience con un '#'
/^$/ Apuntará a cualquier línea en blanco
/}$/ Apuntará a toda línea que termine con un '}' (sin espacios)
/} *$/ Apuntará a toda línea que termine con un '}' con cero o más espacios
/[abc]/ Apuntará a toda línea que contenga una 'a', 'b', o 'c' minúscula
/^[abc]/ Apuntará a cualquier línea que empiece con 'a', 'b', o 'c'
SUSTITUCIÓN EN ARCHIVOS
Clases de caracteres
Clase de carácter Descripción
[:alnum:] Alfanumérico [a-z A-Z 0-9]
[:alpha:] Alfabético [a-z A-Z]
[:blank:] Espacios o tabuladores
[:cntrl:] Cualquier carácter de control
[:digit:] Dígitos numéricos [0-9]
[:graph:] Cualquier carácter visible (no espacios en blanco)
[:lower:] Minúsculas [a-z]
[:print:] Caracteres que no sean de control
[:punct:] Caracteres de puntuación
[:space:] Espacio en blanco
[:upper:] Mayúsculas [A-Z]
[:xdigit:] Dígitos hexadecimales [0-9 a-f A-F]
Y pues siguiendo con este howto les dejo este script que acabo de ocupar para sustituir una dirección web de todos los archivos html de un directorio y hace un backup de los archivos modificados por si necesitas restaurar.
El modo de uso de este script es:
MOSTRANDO SALIDA ESTANDAR
sed -e 'd' archivo.txtEste comando no edita el archivo, solo muestra el contenido del mismo eliminando la primer linea de la salida estandard
sed -e '1,10d' /etc/services | moreEs parecido al anterior solo que ahora es con rangos, y elimina de la salida estandard de la linea 1 a la 10
sed -e '/^#/d' /etc/services | moreElimina de la salida todas las lineas que empiezan con el caracter '#'
Expresiones regulares:
^ Apunta al comienzo de la línea
$ Apunta al final de la línea
. Apunta a un único carácter
* Apunta a cero o más ocurrencias del carácter previo
[ ] Apunta a todos los caracteres entre los corchetes
Ejemplos con expresiones regulares:
/./ Apuntará a cualquier línea que contenga al menos un carácter
/../ Apuntará a cualquier línea que contenga al menos dos caracteres
/^#/ Apuntará a cualquier línea que comience con un '#'
/^$/ Apuntará a cualquier línea en blanco
/}$/ Apuntará a toda línea que termine con un '}' (sin espacios)
/} *$/ Apuntará a toda línea que termine con un '}' con cero o más espacios
/[abc]/ Apuntará a toda línea que contenga una 'a', 'b', o 'c' minúscula
/^[abc]/ Apuntará a cualquier línea que empiece con 'a', 'b', o 'c'
sed -e '/expreg/d' /ruta/a/mi/archivo/de/pruebas | moreElimina de la salida que coincidan con la expresion
sed -n -e '/PRINCIPIO/,/FIN/p' /mi/archivo/de/pruebas | moreMuestra un bloque de texto que comienza con la linea que contiene "PINCIPIO" y terminará con la linea que contiene "FIN"
SUSTITUCIÓN EN ARCHIVOS
sed -e 's/foo/bar/' miarchivo.txtSustituye dentro de miarchivo.txt la primer coincidencia de foo por la cadena bar
sed -e 's/foo/bar/g' miarchivo.txtLa opción "g" indica que la sustitución será de manera global en el archivo
sed -e '1,10s/enchantment/entrapment/g' miarchivo2.txtSustituye la palabra enchantment por entrapment pero solo hasta la linea 10 del archivo
sed -e '/^$/,/^FIN/s/colinas/montañas/g' miarchivo3.txtSustituye 'colinas' por 'montañas', pero únicamente en los bloques de texto que comiencen con una línea en blanco, y que terminen con una línea que comience con los tres caracteres 'FIN'
sed -e 's:/usr/local:/usr:g' milista.txtcambia /usr/local por /usr:
sed -e 's/<[^>]*>//g' miarchivo.htmlElimina etiquetas html. El '[^>]' especifica un "carácter que no sea '>'" y el '*' después del mismo completa la expresión para significar "cero o más caracteres que no sean '>'"
Clases de caracteres
Clase de carácter Descripción
[:alnum:] Alfanumérico [a-z A-Z 0-9]
[:alpha:] Alfabético [a-z A-Z]
[:blank:] Espacios o tabuladores
[:cntrl:] Cualquier carácter de control
[:digit:] Dígitos numéricos [0-9]
[:graph:] Cualquier carácter visible (no espacios en blanco)
[:lower:] Minúsculas [a-z]
[:print:] Caracteres que no sean de control
[:punct:] Caracteres de puntuación
[:space:] Espacio en blanco
[:upper:] Mayúsculas [A-Z]
[:xdigit:] Dígitos hexadecimales [0-9 a-f A-F]
sed -e 's/.*/Rafa dijo: &/' msjorig.txtEl siguiente ejemplo pondrá el prefijo "Rafa dijo: " a cada frase/linea
Y pues siguiendo con este howto les dejo este script que acabo de ocupar para sustituir una dirección web de todos los archivos html de un directorio y hace un backup de los archivos modificados por si necesitas restaurar.
#!/bin/bash echo "";echo ""; echo "" echo "Sustituyendo http://beta.fd.uach.mx" echo "en todos los directorios y subdirectorios de: $1" find $1 -iname *.html > tmp while read linea do sed 's/http:\/\/beta.fd.uach.mx//g' $linea > $linea.tmp cp $linea $linea.bak cat $linea.tmp > $linea rm $linea.tmp done < tmp rm tmp
El modo de uso de este script es:
./script.sh /directorio/de/mis/html
No hay comentarios:
Publicar un comentario