English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

El comando Linux sed

大全 comando Linux

El comando Linux sed es utilizado para procesar archivos de texto con scripts.

sed puede procesar y editar archivos de texto según las instrucciones del script.

Sed se utiliza principalmente para editar automáticamente uno o más archivos, simplificar las operaciones repetitivas en los archivos, escribir programas de conversión, etc.

Sintaxis

sed [-hnV][-e<script>][-f<archivo_script>][archivo_de_texto]

Descripción de los parámetros:

  • -e<script> o--expression=<script> : Procesar el archivo de texto de entrada con el script especificado en las opciones.

  • -f<archivo_script> o--file=<archivo_script> : Procesar el archivo de texto de entrada con el archivo de script especificado en las opciones.

  • -h o--help : Mostrar ayuda.

  • -n o--quiet o--silent : Mostrar solo los resultados procesados por el script.

  • -V o--version : Mostrar información de versión.

Descripción de la acción:

  • a : Agregar, a puede recibir una cadena después, y estas cadenas aparecerán en una nueva línea (la línea siguiente actual) ~

  • c : Reemplazar, c puede recibir una cadena después, y estas cadenas pueden reemplazar n1,n2 ¡Entre las líneas!

  • d : Eliminar, ya que es eliminar, por lo general no se conecta nada después de d;

  • i : Insertar, i puede recibir una cadena después, y estas cadenas aparecerán en una nueva línea (la línea anterior actual);

  • p : Imprimir, es decir, imprimir los datos seleccionados. Por lo general, p se combina con parámetros sed -n : Ejecutar juntos ~

  • s : Reemplazar, se puede realizar el trabajo de reemplazo directamente. Por lo general, esta acción de s se puede combinar con expresiones regulares. Por ejemplo 1,20s/old/new/g ¡ya está!

Ejemplo en línea

Agregue una línea después de la cuarta línea del archivo testfile y envíe el resultado a la salida estándar, ingrese el siguiente comando en el símbolo del sistema:

sed -e 4a\newLine testfile

Primero, ver el contenido de testfile como sigue:

$ cat testfile #Ver el contenido de testfile  
HELLO LINUX!  
Linux es un unix gratuito-sistema operativo.  
¡Este es un archivo de prueba de linux!  
Linux test

El resultado de la salida después de usar el comando sed es el siguiente:

$ sed -e 4a\newline testfile #Agregue una nueva cadena después de la cuarta línea usando sed  
¡HELLO LINUX! #El contenido original del archivo testfile  
Linux es un unix gratuito-sistema operativo.  
¡Este es un archivo de prueba de linux!  
Linux test  
newline

nuevo agregado por unidad de línea/Eliminar

poner /etc/El contenido de passwd se lista e imprime con números de línea, además, por favor, coloque el 2~5 d' ,那个 'd' es eliminar!

[root@www ~]# nl /etc/passwd | sed '2,5d'
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(se omiten los detalles).....

Línea eliminada!2,5La acción de 'sed' es ' 2-5 d' , la 'd' es eliminar! Porque 2-5 Línea a eliminar, por lo que los datos mostrados no -e es correcto, sin -e también está bien! Además, también debe tenerse en cuenta que la acción después de 'sed' debe estar entre comillas simples ''!

Eliminar solo la línea 2 Línea

nl /etc/passwd | sed '2d'

Eliminar la línea 3 Hasta la última línea

nl /etc/passwd | sed '3$d'

Agregue 'drink tea?' después de la segunda línea (es decir, en la tercera línea)!

[root@www ~]# nl /etc/passwd | sed '2a drink tea'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(se omiten los detalles).....

Entonces, si se desea agregar antes de la segunda línea

nl /etc/passwd | sed '2i drink tea'

Si se desea agregar más de dos líneas, agregue dos líneas de texto después de la segunda línea, por ejemplo Drink tea or ..... Y drink beer?

[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
> drink beer ?'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(se omiten los detalles).....

Entre cada línea debe agregarse una nueva línea con el carácter de escape ' \ '. Por lo tanto, en el ejemplo anterior, podemos ver que en el final de la primera línea hay un \.

Reemplazo y visualización basados en renglones

Reemplazar la línea2-5Reemplazar el contenido de la línea por 'No 2-5 ¿number』?

[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(se omiten los detalles).....

Con este método, podemos reemplazar toda la línea de datos!

Solo lista /etc/El archivo passwd en la línea 5-7 Línea

[root@www ~]# nl /etc/passwd | sed -n ''5,7p'
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

A través de esta función de visualización de sed basada en renglones, se puede seleccionar y visualizar ciertas líneas de un archivo.

La búsqueda de datos y su visualización

Búsqueda /etc/Las líneas de passwd que contienen la palabra clave root

nl /etc/passwd | sed '/root/p'
1  root:x:0:0:root:/root:/bin/bash
1  root:x:0:0:root:/root:/bin/bash
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
4  sys:x:3:3:sys:/dev:/bin/sh
5  sync:x:4:65534:sync:/bin:/bin/sync
....Ignorar lo siguiente

Si se encuentra root, además de mostrar todas las líneas, también se mostrarán las líneas coincidentes.

Usar-Cuando se usa 'n', solo se imprimirán las líneas que contienen el patrón.

nl /etc/passwd | sed -n ''/root/p'
1  root:x:0:0:root:/root:/bin/bash

La búsqueda de datos y su eliminación

Eliminar/etc/passwd todas las líneas que contienen root, otras líneas de salida

nl /etc/passwd | sed  '/root/d'
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3  bin:x:2:2:bin:/bin:/bin/sh
....Ignorar lo siguiente
#El primer renglón que coincide con root ya ha sido eliminado

La búsqueda de datos y la ejecución de comandos

Búsqueda/etc/passwd, encuentra la línea correspondiente a root, ejecuta el grupo de comandos dentro de los corchetes, separados por punto y coma, aquí reemplaza bash por blueshell y luego muestra esta línea:

nl /etc/passwd | sed -n ''/root/{s/bash/blueshell/;p;q'    
1  root:x:0:0:root:/root:/bin/blueshell

El último q es salir.

Búsqueda y reemplazo de datos

Además del modo de procesamiento de línea completa, sed también puede usar la línea como unidad para buscar y reemplazar datos parte. Básicamente, la búsqueda y el reemplazo de sed son bastante similares a vi! Es un poco como esto:

sed 's/La cadena a ser reemplazada/La nueva cadena/g'

Primero observa la información original, utiliza /sbin/ifconfig consulta IP

[root@www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(se omiten los detalles).....

La dirección IP de este equipo es192.168.1.100。

Eliminar la parte anterior del IP

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

A continuación, elimina la parte posterior, es decir: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

Eliminar la parte posterior del IP

[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100

Edición múltiple

Un comando sed, eliminar/etc/Los datos desde la tercera línea del passwd hasta el final, y reemplaza bash por blueshell

nl /etc/passwd | sed -e ''3$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

-e significa edición múltiple, el primer comando de edición elimina/etc/Los datos desde la tercera línea del passwd hasta el final, la segunda orden busca bash y lo reemplaza por blueshell.

Modificar directamente el contenido del archivo (acción peligrosa)

sed puede modificar directamente el contenido del archivo, ¡sin necesidad de usar comandos de tubería o redirección de flujos de datos! Sin embargo, dado que esta acción modificará directamente el archivo original, ¡por favor no pruebes con la configuración del sistema! ¡Aún utilizamos el archivo regular_express.txt para probar y verlo!

contenido archivo regular_express.txt como sigue:}

[root@www ~]# cat regular_express.txt 
w3codebox.
google.
taobao.
facebook.
zhihu-
weibo-

utiliza sed para cambiar cada línea final de regular_express.txt que termina en . a !

[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
[root@www ~]# cat regular_express.txt 
w3codebox!
google!
taobao!
facebook!
zhihu-
weibo-

:q:q

utiliza sed directamente para agregar en la última línea de regular_express.txt # Esto es una prueba:

[root@www ~]# sed -i '$a # Esto es una prueba' regular_express.txt
[root@www ~]# cat regular_express.txt 
w3codebox!
google!
taobao!
facebook!
zhihu-
weibo-
# Esto es una prueba

debido a que $ representa la última línea, y la acción a es agregar, por lo tanto, se agrega al final del archivo # Esto es una prueba!

comando sed -opción i puede modificar directamente el contenido del archivo, esta función es muy útil! Por ejemplo, si tienes un 10línea 0 archivo 10000, tienes que agregar en la línea 10línea 0 agregar texto algunos, en este caso usar vim podría volverse loco! Porque el archivo es muy grande! ¿Qué hacer? ¡Utiliza sed! Modifica directamente a través de sed/función sustituir, ¡incluso no necesitas usar vim para editar!

大全 comando Linux