*. Aca vamos a ver un par de ejemplos de como usar sed.*
Sintaxis
sed [options] ‘comand1′ [files]
sed [options] -e ‘comand1′ [-e 'comand2 ...] [files]
* -e especifica que el proximo argumento (cmd) es un comando sed ( o una series de comandos) cuando se especifica unicamente una serie de strings de comandos -e es opcional
sed [options] -f script [files]
*el archivo ‘script’ es propiamente un script
Syntax:
#sed 'ADDRESSs/REGEXP/REPLACEMENT/FLAGS' filename
#sed 'PATTERNs/REGEXP/REPLACEMENT/FLAGS' filename
* s is substitute command
* / is a delimiter
* REGEXP is regular expression to match
* REPLACEMENT is a value to replace
| Opcion | función |
|---|---|
| d | Borra lineas |
| s | Realiza substituciones de texto |
| g (es un flag para usar con s ) | Reemplaza todas las instancias de los patrones |
| n (es un flag para usar con s ) | Reemplaza la instancia numerox, default 1 |
| p (es un flag para usar con s ) | Imprime la linea si la substitucion fue correcta. Se usa generalmente con -n |
| y (es un flag para usar con s ) | Traduce caracteres es similar al comando tr | w archivo (es un flag para usar con s ) | Imprime la line a un archivo si la substitucion se llevo a cabo |
Cuando utilizemos sed tenemos varias formas de usarlo una de ellas es usando expresiones regulares por la cual se usan entre /regex/ pero para entender bien como es el tema lo mejor que se puede hacer es verlo con ejemplos.
Hay infinidad de ejemplos para demostrar el poderio de esta herramienta pero a fines practicos vamos a ver algunos lo demas se lo dejo a uds.
*. El archivo que vamos a usar para los ejemplos.*
[rino@localhost scripting]$ cat test1 #uno #uno #uno #uno dos tres cuatro cinco seis "hola " si [rino@localhost scripting]$
*. Aca vamos a eliminar de la linea 3 a la 5 .*
[rino@localhost scripting]$ sed '3,5d' test1 > test1.out [rino@localhost scripting]$ cat test1.out #uno #uno tres cuatro cinco seis "hola " si [rino@localhost scripting]$
*. Ahora vamos las lineas que contienen # al principio:
[rino@localhost scripting]$ sed '/^#/d' test1 > test2.out [rino@localhost scripting]$ cat test2.out dos tres cuatro cinco seis "hola " si [rino@localhost scripting]$
*.Ahora vamos a usar la traduccion de caracteres (todas las o por una x)
[rino@localhost scripting]$ sed 'y/o/x/' test1 > text3.out [rino@localhost scripting]$ cat text3.out #unx #unx #unx #unx dxs tres cuatrx cincx seis "hxla " si [rino@localhost scripting]$
*.Ahora vamos a poner un @ en todas las lineas vacias que halla.*
[rino@localhost scripting]$ sed 's/^$/@/' test1 #uno #uno #uno #uno dos tres cuatro cinco seis "hola " @ si [rino@localhost scripting]$ Presten atencion que aca la linea tiene que estar vacia sin nada sino no cumple con el patron ^$
.*Ahora vamos a reemplazar todas las “” por un caracter vacio.*
[rino@localhost scripting]$ sed 's/"//g' test1 > test5.out [rino@localhost scripting]$ cat test5.out #uno #uno #uno #uno dos tres cuatro cinco seis hola si [rino@localhost scripting]$
*.En los ejemplos que se uso substitucion podiamos obtener la salida a otro archivo y tendriamos que haberlo realizado asi:.*
[rino@localhost scripting]$ sed 's/"//g w rino' test1
[rino@localhost scripting]$ sed 's/^$/@/ w rino1' test1
*. Algunos ejemplos mas:*
Borrar lineas que contienen tab o espacios en blanco. [rino@localhost scripting]$ sed '/^[ Tab]*$/d' test1 O tambien asi [rino@localhost scripting]$ sed '/^[[:blank]]*$/d' test1 Eliminar todas las lineas que no contengan #noborrar [rino@localhost scripting]$ sed '/#noborrar/!d' test1 Eliminar todas las lineas que contienen . o # [rino@localhost scripting]$ sed '/^[\.#]/d' test1 Agrega un espacio a cada caracter [rino@localhost scripting]$ sed 's/ */ /g' test1 Cambia todas las ocurrencias de abc a def entre las lineas 11 y 20 [rino@localhost scripting]$ sed '11,20s/abc/def/g' test1 Traduce los caracteres xwz a @@@ desde la lina 3 a 20 [rino@localhost scripting]$ sed '3,20y/xwz/@@@/' test1 [rino@localhost scripting]$
*.Ahora vamos a utilizar el sed pero pasandole lo que queremos utilizar desde un archivo.*
Utilizaremos este archivo [rino@localhost scripting]$ cat test1 """""" #uno #uno #uno #uno dos tres cuatro cinco seis "hola " si [rino@localhost scripting]$
*Lo que vamos hacer es que en la primera linea dentro de los 10 primeros caracteres busque un determinado caracter en la posicion 2 y 4 y lo reemplaze por otro, luego vamosa reemplazar todas los # por una @ y todas las u por una x. Imaginense que pueden aplicar muchas cosas, esto es solo el comienzo.*
Este archivo es el que contiene la info detallada arriba.
[rino@localhost scripting]$ cat cmd
1,10{
s/"/(/2
s/"/)/4
}
{s/#/@/
s/u/x/
}
[rino@localhost scripting]$
*.Aca ejecuto el comando.*
[rino@localhost scripting]$ sed -f cmd test1
"("")"
@xno
@xno
@xno
@xno
dos
tres
cxatro
cinco
seis
"hola "
si
[rino@localhost scripting]$
*. Tambien podria aplicar lo de decirle a donde me mande la salida.*
[rino@localhost scripting]$ cat cmd
1,10{
s/"/(/2
s/"/)/4
w rino1
}
{s/#/@/
s/u/x/
w rino
}
[rino@localhost scripting]$
Tengan en cuenta que el primer archivo rino1 solo va a contener los cambios de la primera llave y el que le sigue va a contener ambos.
*. Les dejo estos links que me paso un amigo... para que vean cuan potente es.....*
Tetris ----> Jugar
Arkanoid ----> Jugar
.* Otra muy buena que no la sabia y me la paso tambien : .*
Con la opcion e ejecuta el resultado de la substitucion..
[root@localhost media]# ls | sed 's/\(.*\)/echo "\1"/e' 666806DD6806ABBD bkp discoint winchot [root@localhost media]#
.* Y en honor a el les dejo su frase :.*
Gabriel Pittau -" ...yo no se para que existen los demás lenguajes de programación.."
.* Bueno espero que les halla servido.*
Fuentes para saber mucho mas sobre sed :
http://www.thegeekstuff.com/2009/11/unix-sed-tutorial-append-insert-replace-and-count-file-lines/
http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-how-to-write-to-a-file-using-sed/
http://www.thegeekstuff.com/2009/09/unix-sed-tutorial-delete-file-lines-using-address-and-patterns/
http://www.thegeekstuff.com/2009/09/unix-sed-tutorial-replace-text-inside-a-file-using-substitute-command/
http://www.thegeekstuff.com/2009/09/unix-sed-tutorial-printing-file-lines-using-address-and-patterns/
http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-how-to-execute-multiple-sed-commands/

The Usando Sed by ITRestauracion, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
Esta excelente el tutoial, no que necesito es reemplazar la /, por ejemplo
qe de una lista de archivo absoluta
/bin/sh
/bin/bash
cambie a
/bin2/sh
/bin2/bash
como se podria?
algo asi seria ??
[root@restauracion opt]# cat test
/bin/bash
/bin/sh
/bin/bash /bin/sh
[root@restauracion opt]#
[root@restauracion opt]# sed -e ‘s/\/bin/\/bin2/g’ test
/bin2/bash
/bin2/sh
/bin2/bash /bin2/sh
[root@restauracion opt]#
¿Asi estaria bien?
algo asi seria ??
[root@restauracion opt]# cat test
/bin/bash
/bin/sh
/bin/bash /bin/sh
[root@restauracion opt]#
[root@restauracion opt]# sed -e ‘s/\/bin/\/bin2/g’ test
/bin2/bash
/bin2/sh
/bin2/bash /bin2/sh
[root@restauracion opt]#
¿Asi estaria bien?