Teneis sed? Pues veniros a elbinario.net!En casi todos los sistemas GNU/Linux viene de serie una herramienta muy útil y que algunos no conocen. Es el comando sed
. Hay varias versiones pero la más usada es gnu sed
.
Pero no vamos a hablar del comando, sus parametros (para eso teneis el manual de sed) y sus innumerables aplicaciones sino de una recopilación de ellas que podemos encontrar en un archivo de texto http://sed.sourceforge.net/sed1line.txt
sed1line es eso, un archivo con chuletas para las que puedes aplicar sed
. Hay muchas y variadas que te podrian ser útiles en algun momento, asi que merece la pena leerlo.
Casi todas usan expresiones regulares complejas y es ahí donde reside su fuerza.
Es una pena que no este traducido al español asi que de momento nos tenemos que quedar con la versión inglesa.
Trucos de consola usando sed
# convertir finales de linea tipo DOS (CR/LF) a formato Unix.
sed 's/.$//' # asume que todas las lineas terminan con CR/LF
sed 's/\x0D$//' # funciona con ssed, gsed 3.02.80 o superior
# borrar espacios en blanco al principio y el final de cada linea
sed 's/^[ \t]*//;s/[ \t]*$//'
# aliniar el texto a una anchura de 79 columnas
sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at 78 plus 1 space
# sustituir "foo" por "bar" en cada linea
sed 's/foo/bar/' # sustituir solo la primera ocurrencia en la linea
sed 's/foo/bar/4' # sustituir solo la cuarta ocurrencia en la linea
sed 's/foo/bar/g' # sustituir todas las veces que se encuentre
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # sustituir solo la anteultima ocurrencia
sed 's/\(.*\)foo/\1bar/' # sustituri solo la ultima ocurrencia
# sustituir "foo" por "bar" SOLO en las lineas que contengan "baz"
sed '/baz/s/foo/bar/g'
# sustituir "foo" por "bar" EXCEPTO en las lineas que contengan "baz"
sed '/baz/!s/foo/bar/g'
# mostrar la linea numero 52
sed -n '52p' # metodo 1
sed '52!d' # metodo 2
sed '52q;d' # metodo 3, eficiente para ficheros grander
# quitar la mayoria de los tags HTML (reconoce tags multilinea)
sed -e :a -e 's/<[^>]*>//g;/</N;//ba'
Emular algunos comandos
# contar lineas (emula "wc -l")
sed -n '$='
# ordenar lineas al reves (emula "tac")
sed '1!G;h;$!d' # metodo 1
sed -n '1!G;h;$p' # metodo 2
# invierta cada caracter de la linea (emula "rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
# junta pares de lineas lado a lado (emula "paste")
sed '$!N;s/\n/ /'
# muestra las 10 primeras lineas (emula "head")
sed 10q
# muestra la 10 ultimas filas (emula "tail")
sed -e :a -e '$q;N;11,$D;ba'
# muestra solo las lineas que se ajustan a la expresion regular (emula "grep")
sed -n '/regexp/p' # metodo 1
sed '/regexp/!d' # metodo 2
# borra lineas duplicadas consecutivas (emula "uniq")
sed '$!N; /^\(.*\)\n\1$/!P; D'
Seguro que muchos que leen esto saben más trucos con sed
asi que os animo a publicarlos en los comentarios ;)
Referencias: http://sed.sourceforge.net/sed1line.txt http://sed.sourceforge.net/sedfaq.html https://www.gnu.org/software/sed/manual/sed.html
Buena chuleta +1
Bienvenido ;)
Bienvenido Bar!!!
gracias por la guia, en su momento conoci las regexp gracias a emacs, al perder el miedo utilce sed, luego salte a awk, despues escribi mi propia libreria de expresiones y… en algun momento probare python cuando me deje de probocar sueño…, por ahora a quien no conosca las regexp o emacs le recomedaria awk que mantiene un balance entre posibilides y «claridad» de lo que se quiere hacer.