miércoles, 26 de febrero de 2014

Comando sed multiusos (mostrar, sustituir)

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

sed -e 'd' archivo.txt
Este 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 | more
Es 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 | more
Elimina 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 | more
Elimina de la salida que coincidan con la expresion

sed -n -e '/PRINCIPIO/,/FIN/p' /mi/archivo/de/pruebas | more
Muestra 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.txt
Sustituye dentro de miarchivo.txt  la primer coincidencia de foo por la cadena bar

sed -e 's/foo/bar/g' miarchivo.txt
La opción "g" indica que la sustitución será de manera global en el archivo

sed -e '1,10s/enchantment/entrapment/g' miarchivo2.txt
Sustituye la palabra enchantment por entrapment pero solo hasta la linea 10 del archivo

sed -e '/^$/,/^FIN/s/colinas/montañas/g' miarchivo3.txt
Sustituye '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.txt
cambia /usr/local por /usr:

sed -e 's/<[^>]*>//g' miarchivo.html
Elimina 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.txt
El 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




martes, 25 de febrero de 2014

Compartir red / internet a partir de wifi en Ubuntu

Hay situaciones en las que estamos limitados en cuanto a red inalambrica  en algunos dispositivos, y estas situaciones suceden casi  siempre cuando algun otro dispositivo si tiene acceso a red / internet  ya sea por wifi o 3G

Es en estos casos cuando pensamos "Si pudiera pasarle el internet de mi cel / otra laptop" . Pues es justo lo que les vengo a comentar en este post.

Caso de ejemplo:
* Tengo 3G en mi cel y quiero pasarle internet a otro dispositivo por cable de red

Procedimiento:
1.-  Compartir mi red 3G a traves de Wifi
2.- Conectar mi laptop a la red compartida de mi celular
3.- Compartir la red que esta recibiendo mi laptop hacia otro dispositivo

Procedimiento del paso 3 en imágenes:


Habilitar el botón :"Todos los usuarios deben conectarse a esta red"

Establecer el método de conexión: "Compartido con otros equipos"



y con esto tendremos nuestra red compartida.

miércoles, 19 de febrero de 2014

Configurar Locales

Este es un problema común en Debian que se presenta cuando instalas tu server y a cada que instalas un paquete, te salen los errores de la configuración de las "Locales"

Instalar Locales
# apt-get install locales
Configurar Locales
en este paso eliges las locales de tu idioma, ejemplo:

es_MX
es_MX.UTF-8

con el siguiente comando:
# dpkg-reconfigure locales
y por ultimo ejecutamos:
# dpkg-reconfigure console-data
y con esto queda configurado completamente tu sistema y puede detectar acentos y demás caracteres propios de tu idioma

lunes, 17 de febrero de 2014

Ejecutar comandos BASH como otro usuario

para ejecutar comandos como si fueras otro usuario puedes hacerlo con el comando su que sirve para cambiarse de usuario en una sesion shell

las opciones de el comando son:

root@vuach:/home/villatux/pruebas#su --help
Modo de uso: su [opciones] [USUARIO]

Opciones:
  -c, --command ORDEN           pasa la ORDEN a la consola invocada
  -h, --help                    muestra este mensaje de ayuda y termina
  -, -l, --login                hace que la consola sea una de acceso
  -m, -p,
  --preserve-environment        no reinicia las variables de entorno, y mantiene la misma consola
  -s, --shell CONSOLA           usa CONSOLA en lugar de la predeterminada en passwd


Ahora para ejecutar el comando como otro usuario lo podemos hacer de la siguiente forma:

su -c "echo blablah > archivo1" -s /bin/bash villatux

y al mostrarel directorio vemos que los permisos y grupo son de el usuario que elegimos para ejecutar "echo":

root@vuach:/home/villatux/pruebas# ls -lah
total 12K
drwxr-xr-x  2 villatux villatux 4,0K feb 17 11:44 .
drwxr-xr-x 52 villatux villatux 4,0K feb 17 11:44 ..
-rw-rw-r--  1 villatux villatux    8 feb 17 11:44 archivo1

Ejecutando unicamente el comando "echo" sin invocar a ningun usuario : 

echo blablah > archivo2

y al listar el directorio podemos ver los permisos, propietario y grupo:

root@vuach:/home/villatux/pruebas# ls -lah
total 16K
drwxr-xr-x  2 villatux villatux 4,0K feb 17 11:44 .
drwxr-xr-x 52 villatux villatux 4,0K feb 17 11:44 ..
-rw-rw-r--  1 villatux villatux    8 feb 17 11:44 archivo1
-rw-r--r--  1 root     root        8 feb 17 11:44 archivo2

miércoles, 12 de febrero de 2014

Ocultar extensiones php/html con .htaccess

Si quieres ocultar las extensiones de tus archivos web, puedes utilizar el siguiente fragmento de codigo para tu .htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
Consulta web sin ocultar extensiones:
www.mipagina.com/contacto.php

Consulta ocultando extensiones :
www.mipagina.com/contacto