English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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á!
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
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 \.
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.
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
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
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.
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
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.
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!