viernes, 7 de diciembre de 2012

Comando sed

Orden Sed

Sintaxis: sed [-f fichero_ordenes] [-n] [archivo]

La herramienta sed es un editor de flujo(stream editor) utilizado para manipular archivos de texto. Sed copia los archivos especificados en la salida estándar después de procesarlos. Este procesamiento de los archivos de entrada se lleva a cabo línea por línea, acorde con las órdenes dadas a sed. Podemos destacar que sed no modifica los archivos de entrada. Las órdenes que procesa sed pueden ser aportadas explícitamente desde la línea de órdenes, o bien éstas pueden residir en un archivo. En este último caso, utilizamos la opción -f y a continuación el nombre del fichero de órdenes. La opción -n será empleada siempre que deseemos evitar la salida por pantalla de la línea que está procesando(por defecto sed visualiza las líneas que procesa, aunque no haga nada)

El aspecto general de las órdenes sed es el siguiente:
[dirección [, dirección ]] función [argumentos]
En éstas se indica la dirección (número de línea) o rango de direcciones a las cuales se debe aplicar la función indicada con sus posibles argumentos.
La mejor manera de entender el funcionamiento de sed es mediante ejemplos, veamos:
Creamos un fichero que contenga el siguiente texto



$ cat fichero
linea primera
linea segunda
linea tercera

linea cuarta
linea quinta


Seleccionar una línea

En este primer ejemplo, imprimimos por pantalla la línea número 3. y especificamos la función p(print), con esto se mostrará lo siguiente.

$sed 3p fichero
linea primera
linea segunda
linea tercera
linea tercera

linea cuarta
linea quinta

Como vemos, sed imprime las líneas del archivo, y la número 3 sale duplicada, por ser la línea que indicamos a sed que sea procesada (impresa en pantalla). Si ahora eliminamos la salida normal con la opción -n, conseguiremos mostrar sólo la línea indicada.

$ sed -n 3p fichero
linea tercera

Seleccionar un rango

En este ejemplo imprimiremos desde la línea 2 hasta la 3.

$ sed -n 2,3p fichero
linea segunda
linea tercera
Los rangos de direcciones, o las direcciones, pueden ser también especificados en forma de expresión regular. De esta manera se podría imprimir desde la primera línea que comienza con un determinado carácter hasta que se encuentre una línea que esté en blanco o algo similar.

$ sed -n /primera$/,$p fichero
linea primera

En el ejemplo anterior mostramos todas las líneas que acaban con la palabra primera. Mediante expresiones regulares también podemos especificar un rango de direcciones, por ejemplo: 



$ sed -n '/segunda$/,$p' fichero
linea segunda
linea tercera

linea cuarta
linea quinta
En este caso desde la linea que acaba con segunda hasta la última línea del fichero, representada por $.


Sustitución

Con la opción s podemos sustituir palabras y con la opción g para indicar que se aplique en todo el documento, por ejemplo
$ sed 's/linea/fila/g' fichero
fila primera
fila segunda
fila tercera

fila cuarta
fila quinta

En el siguiente ejemplo eliminaremos todos los espacios en blanco.

$ sed 's/ //g' fichero
lineaprimera
lineasegunda
lineatercera
lineacuarta
lineaquinta

Operador &

Se sustituye por el patrón reconocido
Ejemplo:
reemplaza primera por <primera>


$ sed 's/primera/<&>/g' fichero
linea <primera>
linea segunda
linea tercera
linea cuarta
linea quinta
Eliminar líneas

Para eliminar desde la línea 1 a la 3.



$ sed '1,3d' fichero

linea cuarta
linea quinta

Si quisiéramos eliminar las líneas que terminan con era:



$ sed '/era$/d' fichero
linea segunda

linea cuarta
linea quinta
Fichero con órdenes

Si creamos un fichero que contenga la siguiente línea



$cat orden
s/a/XXX/g

Al indicarle a sed que utilize este archivo de órdenes para procesar otros archivos, cualquier carácter a será sustituido por XXX. Por ejemplo:

$ sed -f ord fichero
lineXXX primerXXX
lineXXX segundXXX
lineXXX tercerXXX
lineXXX cuXXXrtXXX
lineXXX quintXXX

Insertar y cambiar líneas


Insertar antes de una línea:



$sed '/segunda$/i\ insertamos linea antes' fichero
linea primera linea
insertamos linea antes
linea segunda
linea tercera
linea cuarta
linea quinta

Insertar un línea después de la línea que coincida con el patron.



$ sed '/segunda$/a\ insertamos linea despues' fichero
linea primera linea
linea segunda
insertamos linea despues
linea tercera
linea cuarta
linea quinta

Con la opción c podemos sustituir las lineas que cumplan con el patron




$ sed '/segunda$/c\ sustituimos la linea' fichero
linea primera linea
sustituimos la linea
linea tercera
linea cuarta
linea quinta

domingo, 2 de diciembre de 2012

Backup Raspberry Pi

Si tenemos instalado el sistema operativo en la tarjeta SD, es una buena idea realizar un backup de esta.

sudo dd bs=1M if=/dev/sdh of=backupRaspberry2-12-2012.img

Con esto tendremos una imagen del sistema en ese momento.

sábado, 1 de diciembre de 2012

Configurando wifi en raspberry pi.

Vamos a configurar la wifi para Raspberry Pi. En este caso particular tenemos una red ONO que está encriptada con WPA.

En primer lugar miramos las redes para ver cual es la nuestra:
$ iwlist wlan0 scan

En segundo lugar añadimos la contraseña y el essid a un fichero.
$ wpa_passphrase "ESSID" CONTRASEÑA >> /etc/wpa_supplicant/wpa.conf

Tendrá un formato parecido al siguiente:
network={
 ssid="ONOXXXX"
 key_mgmt=WPA-PSK
 psk="XXXXXXXXXXX"
 
}

También podemos hacerlo nosotros mismos. Ahora ya podemos intentar asociarnos.
$ wpa_supplicant -iwlan0 -dnl80211 -c /etc/wpa_supplicant/wpa.conf 

Si todo ha salido bien tendremos funcionando el wifi en la interfaz wlan0.
root@raspberrypi:/home/pi# ifconfig 
eth0      Link encap:Ethernet  HWaddr b8:27:xx:xx:xx:xx  
          inet addr:192.168.1.17  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1488  Metric:1
          RX packets:3128 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2461 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:164652 (160.7 KiB)  TX bytes:181438 (177.1 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:1a:xx:xx:xx:xx  
          inet addr:192.168.1.18  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:739 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:102641 (100.2 KiB)  TX bytes:2816 (2.7 KiB)
Por último podemos agregar las siguientes líneas al fichero /etc/network/interfaces.
echo "wpa-driver nl80211" >> /etc/network/interfaces
echo "wpa-conf /etc/wpa_supplicant/wpa.conf" >> /etc/network/interfaces