Filtros:
Se da el
nombre de filtros a un grupo de comandos que leen alguna entrada, realizan una
transformación y escriben una salida(Ordenar, buscar dentro de un archivo de textos). Además de los que veremos aquí, incluye
comandos tales como head, tail, wc, y cut.
SORT
La
comparación u ordenación puede ser por caracteres ASCII o por valor numérico.
La ordenación ASCII es la más parecida a la alfabética, sigue el orden del
juego de caracteres ASCII. En este ordenamiento, los caracteres idiomáticos
(vocales acentuadas, ñ) no se encuentran en el orden alfabético tradicional. En
la ordenación numérica se respeta la ordenación por valor numérico de la cadena
de caracteres: 101 va después de 21; en ordenamiento ASCII sería al revés.
Si no se
indican campos de ordenación, la comparación se hace sobre toda la línea. Si se
indican campos, la comparación se hace considerando la cadena de caracteres
iniciada en el primer carácter del primer campo hasta el último carácter del
último campo.
ordena según el código ASCII.
|
|
sort
-n arch2.num
|
ordena numéricamente.
|
sort -t: -k1,3 arch1.txt
|
ordena por campos separados por “:”,
tomando en cuenta para la comparación los caracteres desde el primero del
campo 1 hasta el último del campo 3.
|
sort -t: -k1.3,3.5 arch1.txt
|
ordena por campos tomando en cuenta
desde el 3er. caracter del campo 1 hasta el 5to. caracter del campo 3.
|
sort
-nr arch2.num
|
ordena en orden numérico
descendente.
|
sort
-k3 arch3.txt
|
ordena alfabéticamente, usando como
cadena de comparación la comprendida desde el primer caracter del 3er. campo
hasta el fin de lína. Como no se indica separador, los campos se definen por
blancos (espacio o tabulador).
|
FIND
El comando find explora
una rama de directorios buscando archivos que cumplan determinados criterios.
El comando find en GNU es extremadamente potente, permitiendo criterios de
búsqueda tales como:
- el nombre contiene cierta cadena de caracteres o aparea con algún patrón:
- son enlaces a ciertos archivos;
- fueron usados por última vez en un cierto período de tiempo;
- tienen un tamaño comprendido dentro de cierto intervalo;
- son de cierto tipo (regular, directorio, enlace simbólico, etc.);
- pertenecen a cierto usuario o grupo;
- tienen ciertos permisos de acceso;
- contienen texto que aparea con cierto patrón.
Una vez ubicados los
archivos, find puede realizar diversas acciones sobre ellos:
- ver o editar;
- guardar sus nombres en otro archivo;
- eliminarlos o renombrarlos;
- cambiar sus permisos de acceso;
- clasificarlos por grupos.
find /var -name *.log
-print busca en el directorio
/var los archivos terminados en .log,imprime sus nombres en la salida.
find /tmp -size +200k
-print busca archivos mayores
de 200k.
En los argumentos numéricos, +N es mayor que N, -N es menor que N, N
es exactamente igual a N.
find /var/spool/mail -atime +30 -print
busca archivos no
accedidos hace más de 30 días. La opción -atime se refiere a tiempo
transcurrido desde última lectura, -mtime desde última modificación de estado o
permisos, -ctime de contenido.
find /var/tmp -empty -exec rm {} \;
busca archivos vacíos y
los borra.
find /home -nouser -ls
busca archivos en los
cuales en lugar del nombre de usuario dueño aparece un número (UID). Esta
situación se da cuando la cuenta de usuario ha sido borrada pero han
permanecido los archivos creados por ese usuario.
El comando grep (Global
Regular Expression and Print) permite buscar las líneas que contienen una
cadena de caracteres especificada mediante una expresión regular. Lee la
entrada estándar o una lista de archivos y muestra en la salida sólo aquellas
líneas que contienen la expresión indicada. La sintaxis es
grep patrón archivos
donde el patrón a buscar
es una expresión regular.
Crear un archivo con los
días de la semana, uno por línea; llamarle dias.
grep martes dias
grep tes dias
muestra las líneas del
archivo dias que contienen la cadena “tes”.
grep unix01 /etc/passwd
grep unix0[1-9] /etc/passwd
ls -l /usr | grep '^d'
lista sólo los
subdirectorios del directorio /usr (la línea empieza con “d”).
ls -l / | grep
'.......rw'
lista sólo los archivos
que otros pueden leer y escribir en el directorio principal.
grep '^[^:]*::'
/etc/passwd
busca usuarios sin
contraseña; caracteres al principio de línea que no sean “:”, y luego “::” (el
segundo lugar, que es el de la contraseña, está vacío).
grep '^[^:]*:\*:'
/etc/passwd
busca usuarios que no
pueden entrar al sistema; tienen un * en el lugar de la contraseña; \ escapa el
significado del segundo *, que vale como caracter a buscar.
Ninguna
expresión regular de grep aparea con un caracter nueva línea; las expresiones
se aplican individualmente a cada línea.
Entre las
opciones de grep se cuentan -i para evitar distinguir entre mayúsculas de
minúsculas, -n para mostrar el número de línea y -v para buscar líneas que no
contengan la expresión regular indicada.
Hay dos versiones
de grep que optimizan la búsqueda en casos particulares:
fgrep (fixed
grep, o fast grep) acepta solamente una cadena de caracteres, y no una
expresión regular, aunque permite buscar varias de estas cadenas
simultáneamente;
egrep
(extended grep), que acepta expresiones regulares extendidas con los operadores
+ ? | y paréntesis.
fgrep no
interpreta metacaracteres, pero puede buscar muy eficientemente muchas palabras
en paralelo, por lo que se usa mucho en búsquedas bibliográficas; egrep acepta
expresiones más complejas, pero es más lento; grep es un buen compromiso entre
ambos.
fgrep martes dias
busca la cadena martes
en el archivo dias.
En fgrep y egrep puede
indicarse la opción -f buscar.exp, donde buscar.exp es un archivo que contiene
la expresión a buscar: cadenas simples para fgrep, expresiones regulares para
egrep, separadas por nueva línea; las expresiones se buscan en paralelo, es
decir que la salida serán todas las líneas que contengan una cualquiera de las
expresiones a buscar.
Crear un archivo
buscar.fgrep con las cadenas “tes” y “jue”, una por línea. El comando
fgrep -f buscar.fgrep
dias
extrae del archivo dias
las líneas que contienen estas cadenas.
El comando grep soporta
fgrep y egrep como opciones -F y -E, respectivamente.
grep -F -f buscar.fgrep dias
egrep
"tes|jue" dias
grep -E
"tes|jue" dias
obtienen el mismo efecto
del comando anterior.
egrep
"([0-9]+ab)*1234" archivo
busca cadenas comenzadas
opcionalmente por un dígito y los caracteres ab, todo el paréntesis 0 o más
veces, y hasta encontrar la cadena 1234.
Escribir grep -E es
similar a egrep, aunque no idéntico; egrep es compatible con el comando
histórico egrep; grep -E acepta expresiones regulares extendidas y es la
versión moderna del comando en GNU. fgrep es idéntico a grep -F.
El comando
tr translitera los caracteres de la entrada: sustituye unos caracteres por
otros. La sustitución es caracter a caracter. Entre sus opciones se encuentran
-d para borrar caracteres; -c para sustituir complemento de los caracteres indicados,
es decir, que no sean ésos; y -s para comprimir caracteres repetidos en uno
solo.
cat dias | tr a-z A-Z
convierte todo a
mayúsculas.
cat dias | tr -d aeiou
borra todas las vocales
del archivo dias.
Agregar al archivo dias
líneas en blanco, varias seguidas, intercaladas entre los nombres de los días.
cat dias
cat dias | tr -s "\n*"
convierte varios
caracteres nueva línea seguidos en una solo; elimina renglones en blanco.
cat nota | tr -c
"[a-zA-Z0-9]" "_"
transforma todos los
caracteres que no sean letras o números en subrayas.
cat nota | tr -cs
"[a-zA-Z0-9]" "[\n*]"
transforma todos los
caracteres que no sean letras o números en nuevalínea, y comprime las
nuevalíneas repetidas en una sola; deja cada palabra sola en un renglón.
ls -l /usr | tr -s " " | cut -f3,4
comprime los blancos en
la salida para poder cortar campos.
No hay comentarios:
Publicar un comentario