PDF de programación - Filtros de Texto UNIX ... y aprenda a manejar vi de una vez

Imágen de pdf Filtros de Texto UNIX ... y aprenda a manejar vi de una vez

Filtros de Texto UNIX ... y aprenda a manejar vi de una vezgráfica de visualizaciones

Publicado el 21 de Mayo del 2018
383 visualizaciones desde el 21 de Mayo del 2018
153,6 KB
25 paginas
Creado hace 13a (31/07/2010)
Filtros de Texto UNIX

... y aprenda a manejar vi de una vez.

César A. Cabrera E.
PULPA: Grupo de Usuarios Linux
Universidad Tecnológica de Pereira

¿Qué son los filtros?

Algún texto
de entrada

Filtro
(Procesa texto)

Algun texto
de salida

Ejemplos:

tail, head, wc, sort, tr.
Grep, egrep, vgrep, fgrep.
Awk, perl, sed.

Fuentes de texto

Se sugiere trabajar con who, ps, ls, find y usar
redirección de flujos y/o entubamientos (pipes).
Casi todos permiten especificar un archivo
origen (passwd, shadow, archivos en /etc, etc).

NOTA: He aquí la versatilidad del modelo de los
flujos, yo no tengo que saber de dónde provienen mis
datos, sólo los uso. Cualquier cosa que me arroje datos
es un flujo de entrada (puede ser el hardware mismo).

Filtricos

Los más simples:

sort (Ordenar): Muestra la entrada ordenada por algún campo.
-f :ignorar caso, -n :orden numérico, -nr :numérico descendente, +# :ignorar primeros
# campos (separados por $FS), -o <archivo de salida>, -u :líneas únicas solamente.
wc (Word Count): Cuenta líneas, palabras y caracteres de la entrada.
-l :Líneas, -c :Caracteres
tr (Transliterar): Reemplaza en la entrada los caracteres indicados.
tr <patrón a cambiar> <patron de reemplazo>
tail (Cola) , head (Cabeza): Muestra solamente algunas líneas de la cola o la cabeza de
la entrada (o archivo).
tail -# :mostrar últimas # líneas, +# : mostrar a partir de # líneas

NOTA: Otros filtros curiositos son uniq [-c -d -u], comm, cmp y diff

Ejemplo de filtricos

>$who | sort
>$who | wc -l
>$ls -l | sort +3nr
Como guión de shell:
cat $* | tr -sc A-Za-z '\012' | sort | uniq -c | sort -n|

tail

Meter como guión de shell el anterior contenido lee de su entrada 10

nombres de archivos (máximo) e imprime las 10 más comunes.

tr -s : sustituír repetidos, -c : complementar set de caracteres.

Nuestro viejo amigo 'ed'
Editor de texto orientado a la línea y fué el primer editor de texto
que hubo en Unix. Combinado con el shell es el origen de las
expresiones regulares.
Órdenes para ejecutarlas sobre el contenido. a : adicionar texto (finalizar
entrada de texto con una línea de sólo un . de contenido).
Formato de ordenes:
[indicador de líneas] {a|d|s|p|w|q}: añadir, eliminar, sustituir, imprimir, guardar
y salir respectivamente.
Indicador de líneas:
#ini,#fin lineas comprendidas desde línea #ini hasta línea #fin
#ini y #fin pueden ser . (línea actual), $ (línea final) o una expresión matemática con
ellas (.+1 : línea siguiente a la actual; $-3 : antepenúltima línea).
g/<regular-expresion>/ : Ejecuta la acción sobre las líneas que contengan la expresión
regular.
Nos veremos en el vi!!! (el infierno para muchos legos).

Familia Grep

grep proviene del comando g/regular-expresion/
de nuestro amigo ed.
Imprime las líneas que contengan la expresión o
patrón indicado.
Sintaxis
grep [-v |-n |-y |-b ] <patrón> <archivos>
-v efecto inverso, -n imprimir número de línea, -y acoplar
minúsculas con mayúsculas (mayúsculas siguen acoplando sólo
con mayúsculas).

El resto de la familia

fgrep : Busca en paralelo por varias líneas de texto.
egrep: Busca usando verdaderas expresiones regulares
(con operadores de disjunción, cerradura y
agrupamiento).

La opción -f <nombre_archivo>:
Lee el patrón de un archivo.

NOTA: Debido a que algunos caracteres de las expresiones regulares de
la familia grep se confunden o tienen otros significados para el shell,
los patrones deben ser protegidos con apóstrofes o insertados en un
archivo aparte.

Expresiones regulares

Significado
inicio de línea
fin de línea (debe ir a final de la expresion)
cualquier carácter (debe ir al principio de la expresión).
* = 0 a n ocurrencias del carácter anterior, + = 1 a n

^
$
.
*, + y ?
ocurrencias y ? = sólo una ocurrencia. xy* reconocería xyyyy pero no
xyxyxy.
asd | qwe
[asd]
[^asd]
una ocurrencia de cualquier carácter que no sea 'a' o 's' o 'd'.
\c

Carácter

una ocurrencia de asd o de qwe.
una ocurrencia de 'a' o de 's' o de 'd'
no ocurrencia de 'a' o de 's' o de 'd'. O lo que es lo mismo

no interpretar c (buscar $: \$). Es decir escapar c.

Ejemplos de grep

>$ls -l | grep '^d'
>$ls -l | grep '^........rw'
>$grep '^[^:]*::' /etc/passwd
Como un sólo comando
>$echo

'^[^aeiou]*a[^aeiou]*e[^aeiou]*i[^aeiou]*o[^aeiou]*u[^aeiou]*$'
>alphavowels.pat

>$fgrep -f alphavowels.pat /usr/dict/web2
Se supone que /usr/dict/web2 es un diccionario de palabras.

NOTA: El diccionario de palabras de Linux generalmente es
/usr/share/dict/linux.words

El hermanito de ed: sed

sed proviene de 'serial ed'
Sintaxis:

sed [-n] <lista de comandos ed> <archivos+>
La opción -n deshabilita la impresión de línea por defecto.

Sed aplica las órdenes dadas una a una e imprime cada renglón
con los cambios efectuados.
Ejemplo: >$who|sed 's/ .* / /'
... y también acepta la opcion -f <archivo>
No permite expresiones aritmeticas: $-5 es ilegal.

Más sed

/patrón/ es un indicador de línea que acopla con las líneas que
coincidan con el patrón.
/patrón/! Es la negación del patrón, es decir, las líneas que no
coincidan con el patrón.
s/patrón/reemplazo/g busca y reemplaza (sustituye) el patrón en la
línea donde se encuentre. Dado que sólo reemplaza la primera
ocurrencia, la g indica que reemplace todas las que haya en la
línea.
^siempre significa inicio y $ siempre significa fin bien sea fin de
línea o ultima línea, según el contexto.

p. ej.: sed '^$q' muestra todas las líneas hasta llegar a una línea vacía.

r <archivo> inserta un archivo a la salida estandar.
= imprimir número de línea.

AWK: El lenguaje de manejo y
procesamiento de patrones.
El nombre AWK proviene de los creadores:Alho, Al; Weinberger,
Peter y Kernigham, Brian.
Es un filtro que tiene su propio lenguaje y permite la
manipulación de texto de la manera más flexible posible, usando
funciones, condiciones, ciclos y estructuras especiales para
ejecutar al inicio y al final del procesamiento.
Sintaxis:

>$awk 'programa' <archivos>
Donde programa es una serie de líneas con la forma
/patrón/ {comandos}, si /patrón/ no existe la acción se ejecuta para

cada línea y si la acción no existe sólo se imprime la línea.
Acepta la opción -f <archivo>

Variables en awk

Variable

FS
NF
línea.
NR
FILENAME
RS
OFMT
OFS
ORS

Significado
Separador de campos
Número de Campos reconocidos en la

Número de registros leídos actualmente.
Adivinen!
Separador de registros (\n por defecto).
Output: Formato de números (de salida).
Output: Separador de campos.
Output: Separador de registros.

Campos en awk

Campos

Cada parte de la línea que está separada por FS (que por defecto
es tab o espacios). El separador se puede cambiar con la opcion
-F<sep> o asignando un valor a FS en el programa.
Cada campo se referencia anteponiendo $ a su posición en el
renglón: $1 es el primero (contando desde 1). No confundir con
variables, las variables no tienen adornos (como sí lo hacen en
shell).
La cantidad de campos leídos es NF.
Ejemplo:

cat /etc/passwd | awk -F: '{print $1}'

$0 es la línea actual entera.

Funciones en awk

Imprime lo que se desee imprimir para la línea especificada

Usa el formato de printf para imprimir: awk '{printf “%4d,

print :
por el patrón: awk '{print NR, $0}'
printf :
%s”, NR, $0 }'
getline():
index(s1,s2):
length(s):
split(s, a, c):
en a. Devuelve la cantidad de partes en que se dividió la cadena.
substr(s,m,n):
int(expresión):
sin(ex), cos(ex), exp(ex) y log(ex): Seno, Coseno, Exponencial y logaritmo
natural respectivamente.

Devuelve 0 si es fin de archivo y 1 si no lo es.
Posicion de s2 en s1, 0 si no está.
Longitud de la cadena s.
Divide la cadena s usando c como separador y lo almacena

Subcadena de s empezando en m y terminando en m+n.
Parte entera de expresión.

BEGIN y END para awk

BEGIN es un patrón cuyos comandos se ejecutan
antes de leer la primera línea.
END es el patrón cuyos comandos se ejecutan
después de leer la última línea.
Ejemplos:

>$awk 'BEGIN {FS=”:”}
>$2==”” '
>$awk 'END {print NR}'

Ejemplos

Programa para contar frecuencia de palabras

>$cat <<FIN >contar.awk

{ for (i=1; i<NF ; i++) num[$i]++ }

END { for (word in num) print word, num[word] }

FIN

>$awk -f contar.txt <archivo de texto>

Programa para identificar palabras repetidas

>$cat <<FIN >repetidas.awk

FILENAME != prevfile { NR=1

prevfile=FILENAME

}

NF>0 { if ($1==lastword)

printf “Duplicada %s en %s, línea %d\n”, $1, FILENAME, NR

for ( i=2; i<NF; i++)

if( $i==$(i-1))

printf “Duplicada %s en %s, línea %d, $i\n”, FILENAME, NR

if(NF>0)

lastword=$NF

}

FIN

>$awk -f repetidas.awk <archivo de texto>

Más detalles

AWK es un programa muy potente y complejo, explorarlo no es de sólo recibir una
charlita y ya, hay que explorarlo ensayando y leyendo el manual(es) que haya a la
mano.
Print y printf aceptan redireccionamientos como si estuvieran en shell (print >, >> y |).
Patrón, patrón como selector: si se usa patrón, patrón como selector esto equivale a las
líneas donde ocurra el primer patrón hasta la línea donde aparezca el segundo patrón.
Ejemplo NR==10, NR==20 equivale a las líneas de 10 a 20.

(lo que permite el uso de

Diseño de programas en Unix:
Todos los programas de utilidad de Unix comparten un diseño común,
todos leen por defecto de la entrada estandar y escriben a la salida
estandar
redireccionamientos e
interconexiones) generalmente (y por defecto) sin encabezados ni
adornos (para que cada línea sea un objeto de interés).
Los parámetros opcionales van siempre antes de los nombres de
archivo a los cuales se aplica el comando y finalmente, escriben los
errores en el error estandar lo cual hace que estos no se pierdan en las
interconexiones ni en los redireccionamientos.

Y el vi?

Vi es sucesor de ed.
Tiene dos formas de trabajar: modo de edición y
modo de comandos.
Al modo de edición se entra con 'i', 'a'.
Al modo de comandos se entra por defecto y con
la tecla 'esc'.
Para poder escribir hay que es
  • Links de descarga
http://lwp-l.com/pdf11150

Comentarios de: Filtros de Texto UNIX ... y aprenda a manejar vi de una vez (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad