He estado viendo muchas cosas sed
últimamente, y considero que es un comando bastante confuso. Las páginas de manual no fueron particularmente útiles, pero sé que se puede usar para analizar la salida de otros comandos.
¿Qué es exactamente sed
y para qué sirve? Estoy buscando una respuesta integral que cubra qué sed
es, para qué se usa comúnmente y algunos ejemplos básicos / sintaxis.
command-line
sed
Seth
fuente
fuente
Sed is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient. But it is sed's ability to filter text in a pipeline which particularly distinguishes it from other types of editors.
info sed
tiene mucho másman sed
. Entonces, adentro/usr/share/doc/sed
, haysedfaq.txt.gz
.Respuestas:
En uso básico se usa para 'buscar y reemplazar' con cadenas.
echo "The quick brown fox jumps over the lazy dog" | sed 's/dog/cat/'
devoluciones
"The quick brown fox jumps over the lazy cat"
Sed realmente brilla cuando se usan expresiones regulares con él.
Es posible que desee echar un vistazo a este artículo sobre
sed
, es bastante completo.fuente
Definiciones
Unix System V: una guía práctica , libro de Mark Sobell:
Página de manual para sed (GNU sed) 4.2.2:
Mi definición informal:
Sed
(abreviatura de editor de flujo ) es una utilidad de procesamiento de texto que se desarrolló en el momento en que el texto se procesó una línea a la vez, pero sigue siendo una de las utilidades Unix / Linux más potentes; Al mismo tiempo, es una forma de lenguaje de secuencias de comandos, diseñado específicamente para procesar texto.Usos
Como sugieren las definiciones,
sed
se utiliza para procesar líneas de texto por lotes, archivos de texto y secuencias de texto canalizadas. Con mayor frecuencia se usa para reemplazar y eliminar texto:Sin embargo, también se puede usar para imitar el comportamiento de otros comandos. Por ejemplo,
dmesg | head -n 3
(imprimir las primeras 3 líneas), podemos hacerdmesg | sed -n 1,3p
.dmesg | grep 'wlan0'
(buscando una cadena), podemos hacerdmesg | sed -n '/wlan0/p'
La gran ventaja que
sed
tiene sobre otras utilidades de procesamiento de texto es la-i
bandera, lo que significa que no solo podemos enviar el texto editado a la pantalla, sino también guardar la edición en el archivo original.awk
los sabores, por el contrario, solo tienen esa característica en laGNU awk
versión.sed
puede recibir información en la línea de comando, con múltiples patrones separados por punto y coma (;
) o desde un archivo de script especificado después de la-f
marca, por ejemplocat someTextfile.txt | sed -f myScript.sed
Aplicaciones y ejemplos de Sed
Sed one-liners
Manipulación de texto con sed, Linux Journal
sed - 20 ejemplos para eliminar / eliminar caracteres de un archivo
Sed Script - Invertir nombres
¿Cómo puedo reemplazar una cadena en un archivo (s)?
¿Cómo puedo eliminar cada segunda línea de un archivo?
fuente
sed
es un comando poderoso que le permite hacer cosas (eliminar líneas, sustitución de cadenas, filtrado de cadenas, etc.).Podría darle una lista de usos con argumentos, pero Internet está lleno de eso. La búsqueda
sed usage by examples
me trajo muchos resultados, el lindo: http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/fuente
Esta respuesta es un trabajo en progreso: se pierden más ejemplos sobre el comando susbstitute
¿Qué es
sed
?sed
= Stream EDitorLa descripción en la página del manual para los
sed
informes GNU 4.2.2:La descripción en la página de GNU
sed
en gnu.org informa:¿Para qué se
sed
usa?Se puede usar para realizar modificaciones complejas en los flujos de datos (generalmente texto, pero también se puede usar para modificar datos binarios).
Entre los casos más comunes de uso hay:
Estos son los casos de uso cubiertos en esta respuesta.
Uso
sed
lee la entrada de un archivo almacenado en el sistema de archivos si se especifica un nombre de archivo en los argumentos de la línea de comandos durante su invocación, ostdin
si no se especifica ningún nombre de archivo.Invocación mínima usando un archivo almacenado en el sistema de archivos:
Invocación mínima usando
stdin
:¡Hola Mundo!
sed
por defecto lee el archivo de entrada línea por línea; lee una línea, elimina la nueva línea final de la línea y coloca la línea procesada en un "espacio de patrón"; finalmente, ejecuta los comandos enumerados en el contenido actual del espacio del patrón y lee una nueva línea del archivo de entrada.Cuando no se especifica ningún comando o cuando se especifica un
p
o und
comando *,sed
siempre imprimirá el contenido actual del espacio del patrón seguido de una nueva línea en cada iteración, independientemente de:Para evitar esto, se puede invocar
sed
junto con el-n
interruptor:* Hablando sólo en los
p
,d
ys
los comandos, que son los comandos que se cubren en esta respuesta.Selección de lineas
sed
puede procesar todo el archivo de entrada o procesar solo las líneas seleccionadas del archivo de entrada; la selección de las líneas del archivo de entrada a procesar se realiza especificando "direcciones"; una dirección puede ser (entre otras cosas) un número de línea o un patrón; Se pueden seleccionar rangos de líneas especificando rangos de direcciones.Las posibles combinaciones de direcciones son:
<N>
(donde<N>
hay un número): los siguientes comandos / comandos se ejecutarán solo en el número de línea<N>
;<N>,<M>
(donde<N>
y<M>
son dos números,<N>
><M>
): los siguientes comandos / comandos se ejecutarán en líneas que van desde el número<N>
de línea hasta el número de línea<M>
inclusive;/<pattern>/
(donde<pattern>
es una expresión regular básica o extendida): los siguientes comandos / comandos se ejecutarán solo en líneas que contienen una ocurrencia de<pattern>
;/<pattern1>/,/<pattern2>/
(donde<pattern1>
y<pattern2>
son básicas o extendida expresiones regulares): el siguiente comando / comandos se ejecuta en las líneas que van desde la primera línea que contiene una aparición de<pattern1>
a la línea siguiente que contiene una ocurrencia de<pattern2>
, varias veces en caso de múltiples ordenado<pattern1>
-<pattern2>
ocurrencias;<N>,/pattern/
(donde<N>
es un número y<pattern>
es una expresión regular básica o extendida): los siguientes comandos / comandos se ejecutarán en líneas que van desde el número de línea<N>
hasta la primera línea que contiene una ocurrencia de<pattern>
;/pattern/,<N>
(donde<pattern>
es una expresión regular básica o extendida y<N>
es un número): los siguientes comandos / comandos se ejecutarán en líneas que van desde la primera línea que contiene una ocurrencia<pattern>
hasta el número de línea<N>
;La selección realizada para imprimir, eliminar o realizar sustituciones en rangos de líneas siempre incluirá las líneas que coincidan con las direcciones especificadas; además, la selección realizada para imprimir, eliminar o realizar sustituciones en rangos de líneas que usan patrones es perezosa y global (es decir, cada rango afectado siempre será el más pequeño posible y se verán afectados múltiples rangos).
Al imprimir rangos de líneas o imprimir solo líneas en las que se ha realizado una sustitución, es necesario invocar
sed
junto con el-n
interruptor para evitar que las líneas que coinciden con el criterio se impriman dos veces (esto sucede solo cuando se imprimen rangos de líneas) y en orden para evitar que las líneas no coincidan con el criterio que se imprimirá independientemente.Una selección de líneas a procesar debe ser seguida por un comando o por múltiples comandos separados por punto y coma agrupados usando llaves.
Comandos: imprimir, borrar
Los comandos utilizados para imprimir o eliminar una selección son, respectivamente:
p
: imprime líneas que coinciden con la dirección especificada / rango de direcciones;d
: elimina líneas que coinciden con la dirección / rango de direcciones especificado;Cuando uno de estos comandos no está precedido por una dirección / selección, el comando se ejecuta globalmente, es decir, en cada línea del archivo de entrada.
Ejemplos: imprimir, borrar
Impresión / eliminación de líneas que especifican direcciones numéricas:
Archivo de muestra:
<N>
:<N>
:<N>
a<M>
inclusiva:<N>
a<M>
inclusivo:Impresión / eliminación de líneas que especifican patrones:
Archivo de muestra:
<pattern>
:<pattern>
:<pattern1>
hasta la coincidencia de línea<pattern2>
inclusive:<pattern1>
con la línea que<pattern2>
incluye:Comando: sustituto
El comando utilizado para realizar una sustitución en una selección es:
s
: sustituye líneas que coinciden con la dirección especificada / rango de direcciones;Cuando este comando no está precedido por una dirección / selección, el comando se ejecuta globalmente, es decir, en cada línea del archivo de entrada.
La sintaxis del
s
comando es:Las barras son "delimitadores"; que se utilizan para delimitar el
<pattern>
,<replacement_string>
y<pattern_flags>
secciones;El delimitador es siempre el carácter que sigue inmediatamente al
s
comando; se puede establecer en cualquier otro carácter, por ejemplo|
:<pattern>
es una expresión regular básica o extendida;<replacement_string>
es una cadena fija que puede incluirsed
secuencias específicas con un significado especial;<pattern_flags>
es una lista de banderas que modifican el comportamiento de<pattern>
.sed
Secuencias específicas más comunes con un significado especial:&
: referencia inversa reemplazada por la cadena que coincide con<pattern>
;\<N>
(donde<N>
es un número): referencia inversa reemplazada con el<N>
grupo capturado en<pattern>
;Banderas más comunes:
g
: obliga<pattern>
a coincidir globalmente, es decir, varias veces en cada línea;i
: obliga<pattern>
a coincidir entre mayúsculas y minúsculas;p
: imprime líneas en las que se ha realizado una sustitución una vez más (útil cuando se utiliza el-n
interruptor ensed
la invocación para imprimir solo las líneas en las que se ha realizado una sustitución);Ejemplos: sustituto
Archivo de muestra:
<pattern>
with<replacement_string>
en cada línea:<pattern>
with<replacement_string>
en cada línea:<pattern1>
y reemplazando todas las ocurrencias de<pattern2>
con<replacement_string>
:<pattern1>
y reemplazando todas las ocurrencias de<pattern2>
con<replacement_string>
:fuente