Comando Linux sed
Manual completo de comandos de Linux
El comando Linux sed se utiliza para procesar archivos de texto mediante 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 operaciones repetitivas en archivos y escribir programas de conversión, etc.
Sintaxis
sed [-hnV][-e<script>][-f<script文件>][文本文件]
Descripción de parámetros:
- -e<script> o --expression=<script> Procesa el archivo de texto de entrada con el script especificado en la opción.
- -f<archivo de script> o --file=<archivo de script> Procesa el archivo de texto de entrada con el archivo de script especificado en la opción.
- -h o --help Muestra la ayuda.
- -n o --quiet o --silent Muestra solo los resultados después del procesamiento del script.
- -V o --version Muestra la información de versión.
Descripción de acciones:
- a : Agregar, después de 'a' se puede indicar una cadena, y estas cadenas aparecerán en una nueva línea (la siguiente línea actual).
- c : Reemplazar, después de 'c' se puede indicar una cadena, estas cadenas pueden reemplazar las líneas entre n1 y n2.
- d : Eliminar, como es eliminación, normalmente después de 'd' no se añade nada.
- i : Insertar, después de 'i' se puede indicar una cadena, y estas cadenas aparecerán en una nueva línea (la línea anterior actual).
- p : Imprimir, es decir, imprimir los datos seleccionados. Normalmente p se ejecuta junto con el parámetro sed -n.
- s : Reemplazar, ¡puede realizar la sustitución directamente! Normalmente esta acción s se puede combinar con expresiones regulares. Por ejemplo, 1,20s/old/new/g.
Ejemplos
Primero creamos untestfilearchivo, con el siguiente contenido:
$ cat testfile #查看testfile 中的内容 HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test Google Taobao Ejemplo Tesetfile Wiki
EntestfileAgregue una línea después de la cuarta línea del archivo 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
Usandosedel comando, el resultado de salida es el siguiente:
$ sed -e 4a\newLine testfile HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! Linux test newLine Google Taobao Ejemplo Tesetfile Wiki
Agregar/Eliminar por líneas
va atestfileEnumere el contenido e imprima los números de línea; al mismo tiempo, elimine las líneas 2 a 5.
$ nl testfile | sed '2,5d'
1 HELLO LINUX!
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
La acción de sed es2,5d, esedsignifica eliminar. Debido a que se eliminaron las líneas 2-5, los datos mostrados ya no contienen las líneas 2-5. Además, originalmente se debería ejecutar sed -e, pero sin -e también se puede. También se debe tener en cuenta que las acciones que siguen a sed deben'...'encerrarse entre dos comillas simples.
Solo eliminar la línea 2:
$ nl testfile | sed '2d'
1 HELLO LINUX!
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
Para eliminar desde la línea 3 hasta la última:
$ nl testfile | sed '3,$d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
Después de la segunda línea (es decir, agregar en la tercera línea) añadedrink tea?el texto:
$ nl testfile | sed '2a drink tea'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
drink tea
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
Si es antes de la segunda línea, el comando es el siguiente:
$ nl testfile | sed '2i drink tea'
1 HELLO LINUX!
drink tea
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
Si se quieren agregar más de dos líneas, después de la segunda línea se añaden dos líneas de texto, por ejemploDrink tea or .....ydrink beer?
$ nl testfile | sed '2a Drink tea or ......\
drink beer ?'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
Drink tea or ......
drink beer ?
3 This is a linux testfile!
4 Linux test
5 Google
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
Entre cada línea se debe usar una barra invertida\para marcar la nueva línea. En el ejemplo anterior, podemos notar que al final de la primera línea se encuentra\presente.
Reemplazo y visualización por líneas
¿Se puede reemplazar el contenido de las líneas2-5 conNo 2-5 number?
$ nl testfile | sed '2,5c No 2-5 number'
1 HELLO LINUX!
No 2-5 number
6 Taobao
7 Ejemplo
8 Tesetfile
9 Wiki
De esta manera podemos reemplazar líneas completas de datos.
Solo muestra las líneas 5-7 del archivo testfile:
$ nl testfile | sed -n '5,7p'
5 Google
6 Taobao
7 Ejemplo
Mediante la función de visualización por líneas de sed, se pueden seleccionar y mostrar ciertos números de línea dentro de un archivo.
Buscar y mostrar datos
Busque en testfile las líneas que contienenoola palabra clave:
$ nl testfile | sed -n '/oo/p'
5 Google
7 Ejemplo
Si se encuentra root, además de mostrar todas las líneas, también se mostrarán las líneas coincidentes.
Buscar y eliminar datos
Elimina todas las líneas de testfile que contenganooy muestra las otras líneas.
$ nl testfile | sed '/oo/d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 Linux test
6 Taobao
8 Tesetfile
9 Wiki
Buscar datos y ejecutar comandos
Busca en testfile y encuentraoola línea correspondiente, ejecuta un grupo de comandos entre llaves; cada comando se separa con punto y coma; aquíooreemplaza conkk, y luego muestra esta línea:
$ nl testfile | sed -n '/oo/{s/oo/kk/;p;q}'
5 Gkkgle
El últimoqes salir.
Búsqueda y reemplazo de datos
Además del modo de procesamiento de líneas completas, sed también puede realizar búsqueda y reemplazo parcial de datos tomando como unidad la línea.
La búsqueda y reemplazo de sed es similar alvicomando vi; el formato de sintaxis es el siguiente:
sed 's/要被取代的字串/新的字串/g'Reemplace la primera aparición de 'oo' en cada línea del archivo testfile con la cadena 'kk' y luego envíe el contenido del archivo a la salida estándar:
sed -e 's/oo/kk/' testfile
gEl identificador indica búsqueda y reemplazo global, de modo que sed reemplace todas las cadenas coincidentes en el archivo. El contenido modificado se enviará a la salida estándar y no se modificará el archivo original:
sed -e 's/oo/kk/g' testfile
La opciónihace que sed modifique el archivo:
sed -i 's/oo/kk/g' testfile
Realice operaciones por lotes en el directorio actual sobre los archivos que comiencentestcon el prefijo:
sed -i 's/oo/kk/g' ./test*
A continuación, usamos /sbin/ifconfig para consultar la IP:
$ /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 .....(以下省略).....
La IP de esta máquina es 192.168.1.100.
Elimine la parte anterior a la IP:
$ /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, se elimina la parte posterior, es decir:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0。
Elimine la parte posterior a la IP:
$ /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 que elimina los datos desde la tercera línea hasta el final de testfile y reemplaza HELLO por EJEMPLO:
$ nl testfile | sed -e '3,$d' -e 's/HELLO/EJEMPLO/'
1 EJEMPLO LINUX!
2 Linux is a free unix-type opterating system.
-e indica edición múltiple. El primer comando de edición elimina los datos de la tercera línea hasta el final de testfile, y el segundo comando busca HELLO y lo reemplaza por EJEMPLO.
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 flujo de datos. Sin embargo, como esta acción modificará directamente el archivo original, ¡por favor no pruebes casualmente con la configuración del sistema! Sigamos usando el archivo regular_express.txt para probar.
El contenido del archivo regular_express.txt es el siguiente:
$ cat regular_express.txt ejemplo. google. taobao. facebook. zhihu- weibo-
Use sed para cambiar el '.' al final de cada línea en regular_express.txt por '!'.
$ sed -i 's/\.$/\!/g' regular_express.txt $ cat regular_express.txt ejemplo! google! taobao! facebook! zhihu- weibo-:q:q
Use sed para agregar directamente al final de regular_express.txt# This is a test:
$ sed -i '$a # This is a test' regular_express.txt $ cat regular_express.txt ejemplo! google! taobao! facebook! zhihu- weibo- # This is a test
Dado que $ representa la última línea y la acción 'a' es agregar, por lo tanto, se agrega al final del archivo# This is a test!
La opción -i de sed-ipuede modificar directamente el contenido del archivo. ¡Esta función es muy útil! Por ejemplo, si tienes un archivo de un millón de líneas y quieres agregar cierto texto en la línea 100, usar vim podría volverte loco, porque el archivo es demasiado grande. Entonces, ¿qué hacer? ¡Usa sed! Con la función de modificación/reemplazo directo de sed, ni siquiera necesitas usar vim para editarlo.
Otras extensiones