PDF de programación - Sed - Introducción a SED - Parte I

Imágen de pdf Sed - Introducción a SED - Parte I

Sed - Introducción a SED - Parte Igráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 17 de Marzo del 2018)
477 visualizaciones desde el 17 de Marzo del 2018
109,1 KB
21 paginas
Creado hace 5a (13/06/2014)
Sed – Introducción a SED – Parte I

Junio 2014



SED - The Stream EDitor - Part I

Este articulo es una introducción a la práctica y uso del editor de flujo “SED”, el articulo intenta
cubrir ciertas funciones poco conocidas, por no decir, casi desconocidas, que hacen de SED
una herramienta indispensable en la caja de herramientas de cualquier usuario de Linux que
desea dominar el manejo del procesamiento de ficheros mediante una consola y un shell.

Índice Parte I

Presentación
Introducción
Sintaxis

Sintaxis general
Sintaxis de un comando
Direccionamiento

Las opciones (argumentos)
Los comandos

Los comandos básicos 1

Flags

Los comandos básicos 2
Los comandos avanzados

Los comandos multi-líneas
Los buffers
Etiquetas
Emplame condicional
Empalme condicional
SED - The Stream EDitor - Part II



Presentación

Sed significa "Stream EDitor" en español “editor de flujo” o “editor de flujo orientado a líneas”.
Por su modo de funcionamiento y concepción, Sed es un editor no interactivo. Al igual que el

editor “ed” (del cual proviene y que lo encontramos aun en las distribuciones actuales), Sed
opera sobre una sola línea a la vez, a diferencia de otros editores como vi, emacs, Nedit, Xedit,
etc., que operan sobre una página completa de texto que aparece en pantalla. El editor “ed”
estaba dotado de un comando que trabajaba sobre el flujo de entrada estándar en vez que sobre
un archivo, y era capaz de mostrar las líneas que contenían una expresión regular. Este
comando cuya sintaxis es "g/re/p" (global/regular expression/print) dio nacimiento a la utilidad
“grep”. Luego aparecería una nueva implementación de una versión de ed, que trabajaba
únicamente sobre el flujo de entrada estándar y recibía las instrucciones de un archivo de script.
Esta versión fue bautizada como Stream EDitor, más conocida con el nombre de “Sed”. El editor
de flujo Sed lee las líneas de uno o varios ficheros desde la entrada estándar, lee los comandos
desde la entrada estándar, o desde un archivo texto (script), y los agrupa bajo forma de
expresiones (comandos de edición), luego aplica estos comandos y escribe el resultado en la
salida estándar. Podríamos resumir el mecanismo de funcionamiento de Sed de esta manera:

Lectura de una línea desde el flujo de entrada (las líneas están delimitada por un carácter
de salto de línea)
La línea es procesada en función de los comandos leídos
Muestra (o no) del resultado en la salida estándar (pantalla)
Continúa con la línea siguiente.

Los comandos aceptan números de líneas, rangos, o expresiones regulares (RE o regex) para
seleccionar la o las líneas sobre las que deben operar

Introducción

Sed recibe las instrucciones o comandos desde la línea de comandos o desde un fichero (script)
y aplica cada instrucción, en el orden en que aparece, a cada línea en la entrada estándar. Una
vez que todas las instrucción han sido aplicadas a la 1ra línea, la línea es mostrada (o no,
dependiendo de lo que se indique) en la salida estándar (la pantalla, o redirigida a un archivo),
luego Sed procede a la lectura y el procesamiento de la siguiente línea y así sucesivamente
hasta el final del archivo de entrada (a menos que encuentre una instrucción de salida) Este
mecanismo es llamado “ciclo”. Se entiende por ciclo a la aplicación de todos los comandos que
componen el script a los datos presentes en el espacio de patrón. Por defecto un ciclo
comprende:

La copia de una línea de entrada al espacio de patrón (la línea estando delimitada por el
carácter fin de línea (\n))
Normalmente el espacio de patrón está vacío, a menos que un comando “D” haya
terminado el ciclo precedente (en ese caso un nuevo ciclo comenzará con los datos
sobrantes en el espacio de patrón).
Sed aplicará los comandos secuencialmente (provenientes de un script o desde la línea de
comandos) a los datos presentes en el espacio de patrón, una vez llegado al final del
script, enviará los datos procesados a la salida estándar, a menos que se indique lo
contrario con la opción "-n", y borrará el espacio de patrón. Todos los datos enviados a la
salida estándar o a un fichero, son seguidos por un carácter de fin de línea (\n).
Copia de una nueva línea o salida si se ha llegado al final del fichero.

Veamos con la ayuda de un organigrama el funcionamiento de Sed mediante un sencillo script
que borra las líneas vacías de un fichero y las líneas que contienen únicamente un carácter

almohadilla (#) al inicio de la línea. Para ello, aquí tenemos un fichero conteniendo algunas
líneas vacías, algunas almohadillas solas, entre ellas una espaciada a la derecha, y dos líneas
con varias almohadillas. El fichero:

#
#
#
##
# Este es un comentario

# Este es otro comentario
#

#
#
###
# Y otro más

#

#
# Y un último comentario
#

El script es relativamente simple. Aquí lo tenemos en una sola línea:

sed -e '/^$/d;/^#$/d'

Y en un script:

#! /bin/sed -f

/^$/d # borrar las líneas vacías
/^#$/d # borrar las líneas conteniendo solo un carácter almohadilla “#”
#+ encontrándose al inicio de la línea y nada detrás

El organigrama: Graforganigr

Sintaxis



Sintaxis general

sed [-opciones] [comando] [<fichero(s)>]
sed [-n [-e comando] [-f script] [-i[.extension]] [l [corte]] rsu] [<comando>] [<fichero(s)>]



Sintaxis de un comando

El direccionamiento de una o varias líneas es opcional en todos los comandos

[dirección[,dirección]][!]comando[argumentos]

Poniendo entre llaves un conjunto de comandos, pueden ser aplicados a una línea o rango de
líneas.

[dirección[,dirección]]{
comando1
comando2
comando3
}

Estos comandos pueden estar puestos en una sola línea, pero deben ser separados por un
punto y coma ( ;).

[dirección[,dirección]]{comando1; comando2; comando3}



Direccionamiento

Sed puede direccionar directamente una línea (o un rango) por su número de línea o por la
coincidencia con una expresión regular haciendo de patrón. Un signo de exclamación (!)
después de un numero de línea, un patrón o una expresión regular evita que la línea (o rango)
sea procesada. El direccionamiento se puede efectuar de la siguientes forma: num

El número de la línea

sed -n 3p fich.txt

inicio~salto

Todas las n líneas (salto) comenzando desde el inicio.

sed -n 1~2p fich.txt

$

/exp/

La última línea del último fichero leído en la entrada, o de cada fichero si las opciones “-i” o
“-s” han sido especificadas.

sed -n '$ p' fich.txt
*sed -ns '$ p' fich*

Todas las líneas que coinciden con la expresión regular exp

sed -n '/est/p' fich2.txt

\#exp#

Todas las líneas que coinciden con la expresión regular exp precisando utilizar como
delimitador el carácter "#" (almohadilla) en lugar del delimitador predeterminado.

sed -n '\#est#p' fich2.txt

num1,num2

Todas las líneas comprendidas entre num1 y num2. Si num2 es inferior a num1, solo num1
es mostrado.

sed -n '3,6 p' fich.txt

/exp1/,/exp2/

Todas las líneas comprendidas entre exp1 y exp2, comprendidas las líneas conteniendo
exp1 y exp2. Si el intervalo conteniendo las 2 expresiones se repite varias veces, Sed
aplicará las instrucciones a cada intervalo sucesivamente. No obstante si exp2 no es
encontrado, las instrucciones son aplicadas a cada línea comenzando por exp1 hasta el
final del fichero.

sed -n '/comentario1/,/comentario2/ p' fich2.txt

num,/exp/ /exp/,num

Todas las líneas comprendidas entre un número de línea y una expresión regular (o a la
inversa). En "num,/exp/", no obstante si exp no es encontrado, las instrucciones son
aplicadas a cada línea comenzando por num hasta el final del fichero. En "/exp/,num", si
num es inferior al numero de línea correspondiente a exp, solo la línea que contiene exp es
mostrada.

sed -n '2,/comentario2/ p' fich2.txt

sed -n '/comentario1/,8 p' fich2.txt



Las opciones (argumentos)

Sed acepta opciones (argumentos), pero no demasiadas. Las mas utilizadas son: "-n", "-e" e "-i".
-n, --quiet, --silent

Solicitud implícita para no mostrar el estado de la memoria principal (buffer). En un script la
notación se hará de esta manera "#n" (un signo almohadilla seguido del carácter “n”) y se
deberá encontrar en la 1ra línea del script.

-e script, --expresión=script

Permite encadenar varios comandos

-f fichero-script, *--file=fichero-script

Lectura de comandos desde el fichero indicado

-i[SUFIJO], --in-place[=SUFIJO]

Edita archivos en el lugar. También da la posibilidad de hacer una copia de respaldo
añadiendo la extensión (-i.BAK)

--posix

Desactiva todas las extensiones de GNU

-r, --regexp-extended

Utiliza expresiones regulares extendidas (ERE)

-s, --separate

Si varios ficheros son ingresados en la entrada, los procesa uno a uno en vez que como
uno solo

-u, --unbuffered

Carga cantidades mínimas de datos desde los ficheros de entrada y libera los
almacenamientos temporales de salida con mayor frecuencia

--help

Muestra esta ayuda y termina

--version

Muestra información acerca de la versión del programa y termina.



Los comandos

En los capítulos que siguen veremos los comandos utilizados por sed. Mientras que el uso de
algunos de ellos puede parecer sencillo, el uso y la implementación de otros dentro de scripts
puede ser un poco más difícil debido a su sintaxis. Algunos comandos admiten un rango de
direcciones mientras que otros solo admiten una e incluso ninguna en una minoría de
comandos.

Los comandos básicos 1

En este capitulo veremos los comandos más conocidos de Sed cuyo uso es relativamente
sencillo. # Comentario (no acepta ninguna dirección)

El carácter # (almohadilla) inicia un comentario que se extiende hasta el final de la línea.
Se puede encontrar en la misma línea de un comando.

Si los dos primeros caracteres de un script Sed son "#n", la opción "-n" (no-autoprint) es forzada.

Por lo tanto si tu script debe empezar necesariamente con una línea de comentario
comenzando con la letra “n” minúscula, utiliza una “N” mayúscula o inserta un espacio

entre la almohadilla (#) y la "n". q quit Abandonar (acepta una dirección)

Abandona sed si
  • Links de descarga
http://lwp-l.com/pdf9616

Comentarios de: Sed - Introducción a SED - Parte I (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad