Entrega 13. Comandos de edición (y II)
% cat "food in cans"
cat: can't open food in cans
Busca que te busca, 'grep'.
grep [opciones] expresión [lista de ficheros]
Grep es sin duda alguna, junto con el uso de las pipes y la redirección, uno de los comandos con más utilidad de linux y por extensión unix, aunque en un principio muchos de vosotros no se la vais a encontrar. Este comando es utilizado para buscar expresiones es un fichero de texto o una lista de ellos. Veamos un ejemplo simple:
|
[matados2k@fortaleza curso]$ cat nueva_lista aspirinas Cerveza Champu Gominolas jb Manolito no te olvides de: Panchitos [matados2k@fortaleza curso]$ grep champu nueva_lista [matados2k@fortaleza curso]$ grep Champu nueva_lista Champu [matados2k@fortaleza curso]$ |
Podéis observar que distingue entre mayúsculas y minúsculas, y que la salida del comando son todas aquellas líneas que contienen la expresión que queremos. Vemos con este sencillo ejemplo cómo grep es una especie de filtro que nos muestra únicamente lo que queremos, veamos otro ejemplo:
|
[matados2k@fortaleza curso]$ cat listado | grep bin lrwxrwxrwx 1 root root 11 abr 21 03:16 rmt -> ../sbin/rmt drwx--x--x 93 root bin 4096 abr 21 04:32 webmin [matados2k@fortaleza curso]$ |
Hemos buscado dentro del listado que hicimos en entregas anteriores todos aquellos ficheros que contengan al grupo o usuario 'bin', aunque si hay una palabra que contenga 'bin' también nos la muestra.
Si necesitáramos saber en qué línea del fichero se encuentran, usaríamos la opción '-n':
|
[matados2k@fortaleza curso]$ cat listado | grep -n bin 174:lrwxrwxrwx 1 root root 11 abr 21 03:16 rmt -> ../sbin/rmt 213:drwx--x--x 93 root bin 4096 abr 21 04:32 webmin [matados2k@fortaleza curso]$ |
Es evidente la gran utilidad de este comando cuando necesitemos “indagar” en un fichero de configuración ;) (cada vez queda menos para entrar en faena con cosas más interesantes) .
Para conseguir el efecto contrario de 'grep', es decir, encontrar todas las líneas donde no se use la expresión, usaremos la opción '-v':
|
[matados2k@fortaleza curso]$ cat nueva_lista | grep C Cerveza Champu [matados2k@fortaleza curso]$ cat nueva_lista | grep -v C aspirinas Gominolas jb Manolito no te olvides de: Panchitos [matados2k@fortaleza curso]$ |
Para evitar que busque la expresión contenida dentro de otras palabras, véase:
|
[matados2k@fortaleza curso]$ cat listado | grep -n bin 174:lrwxrwxrwx 1 root root 11 abr 21 03:16 rmt -> ../sbin/rmt 213:drwx--x--x 93 root bin 4096 abr 21 04:32 webmin [matados2k@fortaleza curso]$ |
Usaremos la opción '-w':
|
[matados2k@fortaleza curso]$ cat listado | grep -w bin drwx--x--x 93 root bin 4096 abr 21 04:32 webmin [matados2k@fortaleza curso]$ |
Qué tal si corregimos las faltas ortográficas bajo consola, 'ispell'.
Este comando es un pequeño corrector ortográfico para consola, es bien sencillo de usar, así que os animo a que lo probéis sin más: “ispell nueva_lista”.
Comparemos diferencias, 'cmp'.
cmp [opciones] fichero1 [fichero2] [skip1] [skip2]
Este comando es de lo más simple de usar, simplemente compara el fichero1 con el fichero2, si éste no se indica usará 'stdin' (recordad lo del ctrl+d cuando uséis 'stdin' o entrada estándar, como prefiráis llamarlo), y muestra las diferencias. Para que lo probéis crearos una archivo con casi los mismo elementos que “nueva_lista” (a estas alturas ya deberíais ver que lo que uso una entrega lo sigo usando para las siguiente, de todas formas el contenido de ese fichero lo habéis visto en un ejemplo de esta entrega).
|
[matados2k@fortaleza curso]$ cat > nueva_lista2 aspirinas Cocacola Champu Gominolas Refresco de limon Juanjo no te olvides de: Panchitos (Pulsación de Ctrl+d) [matados2k@fortaleza curso]$ cmp nueva_lista nueva_lista2 nueva_lista nueva_lista2 son distintos: byte 12, línea 2 [matados2k@fortaleza curso]$ |
Podéis observar que nos indica dónde se produce la primera diferencia (considerar “byte” como “carácter” por si os liáis.)
No veremos opciones para este comando pero explicaré eso del 'skip1' y 'skip2', opcionalmente podemos decirle desde qué byte del documento empezar a mirar uno y otro respectivamente, y eso es lo que son estos dos parámetros opcionales. Para dónde está la siguiente diferencia haríamos lo siguiente:
|
[matados2k@fortaleza curso]$ cmp nueva_lista nueva_lista2 13 13 nueva_lista nueva_lista2 son distintos: byte 1, línea 1 [matados2k@fortaleza curso]$ |
Pero recordad que mira byte a byte (o si preferís carácter por carácter), y si hay una palabra cambiada dará una diferencia por cada carácter. Así que esto no lo hace muy útil para buscar diferencias, pero sí para saber si un fichero es idéntico o no a otro.
Para mirar bien las diferencias, 'diff'.
diff [opciones] fichero1 fichero2
Este comando es mucho más eficiente que 'cmp' a la hora de buscar diferencias, ya que lo hace por líneas y también tiene tantas opciones que lo convierte en un comando realmente complejo, por lo que lo usaremos como un 'cmp' avanzado (no veremos opciones).
|
[matados2k@fortaleza curso]$ diff nueva_lista nueva_lista2 2c2 < Cerveza --- > Cocacola 5,6c5,6 < jb < Manolito no te olvides de: --- > Refresco de limon > Juanjo no te olvides de: [matados2k@fortaleza curso]$ |
La forma de leer la salida no es muy compleja, '2c2' significa “en la línea 2 en el segundo carácter está la diferencia”, cuando hay un '<' se refiere a lo que pone en el primer fichero indicado, y '>' al segundo. Cuando no hay diferencia no nos muestra resultado alguno.
Despedida.
Bueno ya llegamos al final, aunque quedan comandos de edición en el tintero (como 'tr', que quizás os pueda ser útil y lo explicaré si lo pedís). La próxima entrega pasaremos a ver el uso de un editor de texto bajo consola, y el porqué de saber usarlo. Un saludo.
Agradecimientos: · Revisión del documento: karuchi (Carolina García).
Página oficial y dominio de mi propiedad http://matados2k.es
Matados'2k Usuario y moderador de foro.noticias3d.com
Matados'2k Usuario y moderador de www.sinuh.org
matados2k (arroba) gmail (punto) com
|
Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos. |



