Cuando tenemos archivos de texto y queremos dar formato simplemente abrimos el archivo en cuestión con nuestro editor de texto preferido (nano o vim) y modificamos dicho archivo. Lamentablemente, no siempre es posible hacer todo con editores de texto, para esos casos existen comandos que permiten la modificación de texto de una forma practica y sencilla.
Antes de empezar a tirar comandos es necesario saber que existen clases de caracteres.
[:alnum:] : Letras y Dígitos
[:alpha:] : Letras
[:blank:] : Espacios en Blanco
[:cntrl:] : Caracteres de control
[:digit:] : Dígitos
[:graph:] : Caracteres impresos sin incluir espacios
[:lower:] : Letras minúsculas
[:print:] : Caracteres impresos incluidos espacios
[:punct:] : Signos de puntuación
[:space:] : Espacios en blanco verticales y horizontales
[:upper:] : Letras mayúsculas
[:xdigit:] : Dígitos Hexadecimales
Tomando como ejemplo el siguiente archivo de texto.
[tusysadmin@localhost ~]$ cat saludo.txt
Bienvenidos a Avenida Siempre Viva 742
Sustituir todos los dígitos por X.
[tusysadmin@localhost ~]$ tr [:digit:] X < saludo.txt
Bienvenidos a Avenida Siempre Viva XXX
Sustituir las letras por el número 0.
[tusysadmin@localhost ~]$ tr [:alpha:] 0 < saludo.txt
00000000000 0 0000000 0000000 0000 742
Sustituir los espacios en blanco por un –
[tusysadmin@localhost ~]$ tr [:blank:] - < saludo.txt
Bienvenidos-a-Avenida-Siempre-Viva-742
Sustituir minúsculas por mayúsculas.
[tusysadmin@localhost ~]$ tr [:lower:] [:upper:] < saludo.txt
BIENVENIDOS A AVENIDA SIEMPRE VIVA 742
Si quisiéramos sustituir o eliminar determinadas palabras y/o lineas de un archivo como el siguiente, nos podemos apoyar con el comando sed.
[tusysadmin@localhost ~]$ cat -n navegadores.txt
1 Los navegadores Web facilitaron el uso de Internet,
2 Sin ellos seguiríamos usando lineas de comandos
3 para conectarnos a los servicios que necesitamos.
4
5 Los más conocidos son Edge, Mozilla Firefox,
6 Opera, Safari y Google Chrome. Sin embargo,
7 son el resultado de la varias adaptaciones, cambios
8 y evoluciones.
9
10 El primer navegador fue WorlWideWeb pero solo
11 funcionaba con Next. El segundo fue Mosaic del
12 cual Mozilla tomó código para su desarrollo, pero
13 uno de los más importantes y que fue el boom de
14 los navegadores fue NetScape.
15
16 NetScape tuvo tanto éxito que motivó la creación
17 de Internet Explorer por parte de Microsoft. Al final,
18 NetScape perdió la llamada guerra de los navegadores
19 contra Internet Explorer.
20
21 Hoy en día Internet Explorer se encuentra al borde de
22 ser descontinuado para dar paso a Edge. Veremos en
23 el futuro que navegador logra sobrevivir.
Mostrar el último párrafo (lineas 21-23) indicando la omisión de las lineas 1-20.
[tusysadmin@localhost ~]$ cat -n navegadores.txt | sed -e '1,20d'
21 Hoy en día Internet Explorer se encuentra al borde de
22 ser descontinuado para dar paso a Edge. Veremos en
23 el futuro que navegador logra sobrevivir.
Imprimir ciertas lineas usando la opción -p.
[tusysadmin@localhost ~]$ cat -n navegadores.txt | sed -n -e '1,3p'
1 Los navegadores Web facilitaron el uso de Internet,
2 Sin ellos seguiríamos usando lineas de comandos
3 para conectarnos a los servicios que necesitamos.
Omitir los las lineas en blanco.
[tusysadmin@localhost ~]$ sed '/^$/d' navegadores.txt
Sustituir las líneas en blanco.
[tusysadmin@localhost ~]$ sed -e '/^$/c\#Linea en blanco' navegadores.txt
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos
para conectarnos a los servicios que necesitamos.
#Linea en blanco
Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo,
son el resultado de la varias adaptaciones, cambios
y evoluciones.
#Linea en blanco
El primer navegador fue WorlWideWeb pero solo
funcionaba con Next. El segundo fue Mosaic del
cual Mozilla tomó código para su desarrollo, pero
uno de los más importantes y que fue el boom de
los navegadores fue NetScape.
#Linea en blanco
NetScape tuvo tanto éxito que motivó la creación
de Internet Explorer por parte de Microsoft. Al final,
NetScape perdió la llamada guerra de los navegadores
contra Internet Explorer.
#Linea en blanco
Hoy en día Internet Explorer se encuentra al borde de
ser descontinuado para dar paso a Edge. Veremos en
el futuro que navegador logra sobrevivir.
Este comando sustituye las lineas en donde encuentra la coincidencia, el problema es que sustituye toda la linea, si en lugar de buscar lineas en blanco hubiera buscado las palabras Internet Explorer, entonces pasaría algo como lo siguiente.
~]$ sed -e '/Internet Explorer/c\Explorer was Here' navegadores.txt
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos
para conectarnos a los servicios que necesitamos.
Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo,
son el resultado de la varias adaptaciones, cambios
y evoluciones.
El primer navegador fue WorlWideWeb pero solo
funcionaba con Next. El segundo fue Mosaic del
cual Mozilla tomó código para su desarrollo, pero
uno de los más importantes y que fue el boom de
los navegadores fue NetScape.
NetScape tuvo tanto éxito que motivó la creación
Explorer was Here
NetScape perdió la llamada guerra de los navegadores
Explorer was Here
Explorer was Here
ser descontinuado para dar paso a Edge. Veremos en
el futuro que navegador logra sobrevivir.
Sustituir exclusivamente una palabra o palabras sin quitar toda la linea.
~]$ sed -e 's/Internet Explorer/Explorer Lento/g' navegadores.txt
Los navegadores Web facilitaron el uso de Internet,
Sin ellos seguiríamos usando lineas de comandos
para conectarnos a los servicios que necesitamos.
Los más conocidos son Edge, Mozilla Firefox,
Opera, Safari y Google Chrome. Sin embargo,
son el resultado de la varias adaptaciones, cambios
y evoluciones.
El primer navegador fue WorlWideWeb pero solo
funcionaba con Next. El segundo fue Mosaic del
cual Mozilla tomó código para su desarrollo, pero
uno de los más importantes y que fue el boom de
los navegadores fue NetScape.
NetScape tuvo tanto éxito que motivó la creación
de Explorer Lento por parte de Microsoft. Al final,
NetScape perdió la llamada guerra de los navegadores
contra Explorer Lento.
Hoy en día Explorer Lento se encuentra al borde de
ser descontinuado para dar paso a Edge. Veremos en
el futuro que navegador logra sobrevivir.
El uso de sed se extiende a las hojas de calculo, ya que es posible manejarlas como cualquier archivo de texto. Para este ejemplo generé un archivo en http://generatedata.com/ al que nombré random.csv.
[tusysadmin@localhost ~]$ cat -n random.csv
1 name,phone,email,country
2 Branden Bowers,(143) 413-5107,semper.pretium.neque@hotmail.org,Sweden
3 Sheila Reeves,(161) 474-5087,libero.et.tristique@hotmail.com,Italy
4 Quentin Parsons,(901) 364-1366,maecenas@hotmail.couk,United States
5 Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
6 Denton Potter,(415) 973-8034,tempus@aol.org,Canada
7 Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
8 Brennan Ferguson,1-811-855-4917,augue.scelerisque.mollis@aol.couk,Ireland
9 Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
10 Dominic Tran,1-453-421-4797,a@hotmail.couk,Turkey
11 Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland
Si eliminamos todos los correos con el dominio @aol debido ya que el dominio ha dejado de existir.
[tusysadmin@localhost ~]$ cat -n random.csv | grep @aol
6 Denton Potter,(415) 973-8034,tempus@aol.org,Canada
8 Brennan Ferguson,1-811-855-4917,augue.scelerisque.mollis@aol.couk,Ireland
De igual forma, se nos pide que modifiquemos el domino hotmail por msn.
[tusysadmin@localhost ~]$ cat -n random.csv | grep hotmail
2 Branden Bowers,(143) 413-5107,semper.pretium.neque@hotmail.org,Sweden
3 Sheila Reeves,(161) 474-5087,libero.et.tristique@hotmail.com,Italy
4 Quentin Parsons,(901) 364-1366,maecenas@hotmail.couk,United States
10 Dominic Tran,1-453-421-4797,a@hotmail.couk,Turkey
Ambas cosas pueden hacerse en una sola linea de código.
~]$ sed -e '/@aol/d' -e 's/hotmail/msn/g' random.csv
name,phone,email,country
Branden Bowers,(143) 413-5107,semper.pretium.neque@msn.org,Sweden
Sheila Reeves,(161) 474-5087,libero.et.tristique@msn.com,Italy
Quentin Parsons,(901) 364-1366,maecenas@msn.couk,United States
Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
Dominic Tran,1-453-421-4797,a@msn.couk,Turkey
Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland
Con este simple comando borramos todas las lineas que tengan un correo con el dominio @aol y al mismo tiempo reemplazamos el dominio hotmail por msn. Para guardar los cambios en el archivo usamos la opción -i.
~]$ sed -i -e '/@aol/d' -e 's/hotmail/msn/g' random.csv
[tusysadmin@localhost ~]$ cat -n random.csv
1 name,phone,email,country
2 Branden Bowers,(143) 413-5107,semper.pretium.neque@msn.org,Sweden
3 Sheila Reeves,(161) 474-5087,libero.et.tristique@msn.com,Italy
4 Quentin Parsons,(901) 364-1366,maecenas@msn.couk,United States
5 Eleanor Villarreal,(411) 615-1484,dolor@yahoo.com,Australia
6 Ciara Levine,1-872-792-7213,interdum.sed@outlook.org,United Kingdom
7 Hedwig Reese,1-626-734-3287,eu.dolor@yahoo.org,Chile
8 Dominic Tran,1-453-421-4797,a@msn.couk,Turkey
9 Zeus Mccormick,(771) 383-8618,et.netus.et@google.net,Ireland
Con esto llegamos al final del post cualquier duda puedes dejarla en la caja de comentarios.