Explicación detallada del comando sed de Shell Three Musketeers

Tabla de contenido

1. Uso común del comando sed

         opciones

         funcionar

2. Ejemplo de uso

2.1 Salida de texto calificado (p significa salida normal)

2.2, sed combinado con expresiones regulares para generar la línea especificada

2.3 Eliminar el texto que cumple las condiciones

 2.4 Insertar filas calificadas

3. Sustituye el texto que cumpla las condiciones

3.1, reemplazo de cadena

3.2, primero haga una copia de seguridad y luego modifique los datos

4. Migrar texto calificado

5. Edite archivos usando scripts

Nota: Además de ver el número fijo de líneas, puede editar el texto agregando la opción "-i" a todas las demás operaciones. De lo contrario, solo podrá ver los resultados después de la operación y no podrá modificar el texto directamente. .

 Resumir


        sed es una poderosa y simple herramienta de análisis y conversión de archivos que puede leer texto, editar el contenido del texto de acuerdo con condiciones específicas (eliminar, reemplazar, agregar, mover, etc.) y finalmente procesar todas las líneas o solo algunas líneas. sed también puede implementar operaciones de procesamiento de texto bastante complejas sin interacción

1. Uso común del comando sed

        Por lo general, existen dos formatos para invocar el comando sed, como se muestra a continuación. Entre ellos, "parámetro" se refiere al archivo de destino de la operación, que se usa cuando hay múltiples objetos de operación, y los archivos están separados por comas ","; y scriptfile indica el archivo de script, que debe especificarse con el Opción -f, que indica que se utiliza el archivo de script especificado Procesar el archivo de objeto de entrada.

sed [opciones] argumento 'acción'

sed [opciones] -f argumento del archivo de script

         opciones

常见的sed命令选项包含以下几种:
-e或-expression=:表示用指定命令或者脚本来处理输入的文本文件
-f或-file-:表示用指定的脚本文件来处理输入的文件文件
-h或--help:显示帮助
-n、-quite或silent:表示仅表示处理后的结果
-i:直接编辑文本文件

         funcionar

        "Operación" se usa solo para acciones que operan en archivos, es decir, comandos sed. Por lo general, esto tiene la forma de parámetros de acción "[n1[n2]]". n1 y n2 son opcionales y representan el número de filas seleccionadas para la operación.Si la operación debe realizarse entre 5 y 20 filas, se expresa como "5, 20 comportamientos de acción". Las operaciones comunes incluyen lo siguiente.

a:增加,在当前行下面增加一行指定内容。
c:替换,讲选定行替换为指定内容。
d:删除,删除选定的行。
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容,如果又非打印字符,则以ASCLL码输出。通常与“-n”选项一起使用。
s:替换,替换指定字符
y:字符转换

2. Ejemplo de uso

Copiamos un archivo de tarjeta de red y lo usamos para demostración

d34216764ba44d3a93d65264570f4054.png

2.1 Salida de texto calificado (p significa salida normal)

sed -n '3p' ens33 #muestra el contenido de la tercera línea

90e7080b1015480c91d988844774f0d5.png

sed -n '3,5p' ens33 #salida 3-5 líneas de contenido

 142766bb24bc49ababf2098a98fac847.png

sed -n '3p;5p' ens33 #salida de la tercera y quinta líneas

51466d0c0041438c952c58f80fb7ba2a.png

sed -n 'p;n' ens33 #salir todas las líneas impares sed -n '1~2p' ens33 también se puede lograr

26614c38a73349bab5e48a9bb4bb87bc.png

 sed -n 'n;p' ens33 #salir todas las líneas pares sed -n '2~2p' ens33 también se puede lograr

604b4884bf664c8885b052b1b38f96c9.png

 sed -n '1,5{p;n}' ens33 #Salida de líneas impares de 1-5 líneas

2e5c56e4c19f4a46bfdb6e70249732bd.png

sed -n '1,5{1~2p}' ens33 #Salida 1-5 líneas impares

sed -n '1,5{2~2p}' ens33 #Produce las líneas pares de 1-5

8b8a5628e50b46f58b9cab68577f8c82.png

sed -n '7,${n;p}' ens33 #Salida de líneas pares después de 7 líneas

 4007c5cd63fa432294829eb4225da10e.png

sed -n '3,+5p' ens33 #Empezar desde la línea 3, salida continua, es decir, salida del contenido de las líneas 3-8

42f6b3a04b6744848a9902df533eeb84.png

2.2, sed combinado con expresiones regulares para generar la línea especificada

El comando sed tiene un formato ligeramente diferente cuando se combina con una expresión regular, y la expresión regular está rodeada por "/".
Nota : si se encuentran símbolos especiales, la expresión regular extendida también debe escapar del carácter "\".

preparar un archivo de texto

fc4a56f5947348cfb2bd25464604d8bc.png

sed -n '/the/p' test.txt #muestra la línea que contiene el 

88a0be4d3d124e58844770ed9f73a4f5.png

sed -n '4,/the/p' test.txt #muestra la línea que contiene el comienzo de la cuarta línea

86dic058af704fce9d686106ab646e58.png

sed -n '/the/=' test.txt #Ingresa el número de línea de la línea que contiene el, usa (=) para generar el número de línea

2570305bf817472ba73f00a829f1bab3.png

sed -n '/^PI/p' test.txt #Produce las líneas que comienzan con PI

e6e718ba46b74dccb081a00de7c7d02b.png

sed -n '/[0-9]$/p' test.txt #líneas de salida que terminan con números 0-9

 8df90bd6e19340c88f17b1db1a296675.png

Nota: Al mirar con qué termina, preste atención al carácter nulo final

sed -n '/\<madera\>/p' test.txt #Produce la línea que contiene la palabra madera, \< \> representa el límite de la palabra

ec2b0ccb3f69454d8a763db44db0a6eb.png

2.3 Eliminar el texto que cumple las condiciones

        Todavía use el archivo test.txt anterior, pero necesitamos hacer una copia de seguridad para la recuperación después de la eliminación

        En los siguientes comandos, el comando nl se usa para contar el número de líneas en el archivo. Combinando este comando, puede ver los resultados de la ejecución del comando de manera más intuitiva. También podemos usar -i o ninguna opción para mostrar, pero la diferencia es que -i opera directamente sobre el texto, y sin parámetros solo muestra el resultado y no opera sobre el texto.

 ba7f09f3df824626a15ae2e0c4472852.png

nl prueba.txt | sed '3d' o sed '3d' prueba.txt o sed -i '3d' prueba.txt

#-modificaré el texto directamente

#borrar la tercera linea

Para una mejor visualización, use nl

350912bc4b4e4cddaa2e5de6e1489117.png

nl test.txt | sed '3,5d' #Eliminar 3-5 líneas

845eef4ed79b438d8ba745badd30b2a9.png

nl test.txt | sed '/the/d' #Eliminar la línea con el carácter, con el símbolo ! significa negación, es decir, eliminar la línea sin el

b8a958f278aa4feb87f61396753d9694.png

        Operación de negación con "!" 

73d03cb8fb2148f9bb70cf63ccbfd771.png

sed '/^[az]/d' test.txt #Eliminar líneas que comienzan con az

c78ea1f277b94dd383820f874a015990.png

sed '/\.$/d' test.txt #Eliminar líneas que terminan en .

026cb43d7dd144968eac49d5ed8f25ad.png

 sed '/^$/d' test.txt #eliminar líneas en blanco

63ac5ee061c8439696ae68dcbf376829.png

        Nota: Si desea eliminar líneas en blanco repetidas, es decir, mantener solo una línea en blanco continua, ejecute el comando "sed -e '/^$/{n;/^$/d}' test.txt" para lograrlo . Su efecto es el mismo que "cat -s test.txt", n significa leer la siguiente línea de datos. 

 2.4 Insertar filas calificadas

 sed '3i quién soy' test.txt #Agregue quién soy en la línea anterior de la tercera línea

1a082527aaa24c1488f3bba95a2b9a8d.png

sed '/el/yo quien soy' test.txt #Agregue quien soy en la línea arriba de la línea que contiene el

4d798d64a21d44898db298f29d3562c5.png

sed '/the/a who am I' test.txt #Add who am I en la siguiente línea de la línea que contiene el

924332def28743af80b3eca0cdaf9e99.png

 sed '3c ##########' test.txt #Reemplace la tercera línea con ##########

2d3d0e9b18c54e8f9984f1f95d1b7d63.png

3. Sustituye el texto que cumpla las condiciones

3.1, reemplazo de cadena

sed 's/the/THE' test.txt #Reemplace el primero en cada línea con THE

db50036cb22645e08a419e879172cf0d.png

sed 's/l/L/2' #Reemplazar el segundo l de cada línea con L

b3509b3f8d1a42bbb6616eb64b1c6c23.png

sed 's/l/L/g' test.txt #Reemplazar todos los l en el archivo con L

2f9cde32d75e48f4ba281576cc33c927.png

sed 's/o/ /g' test.txt #Reemplazar todo o con caracteres vacíos

a08c47010f5e47db92b83e425f760b2c.png

 sed 's/^/#/' test.txt #Añadir # delante de todas las líneas

055821a06735427d88e8c4b92f9ce6c9.png

sed '/the/s/^/#/' test.txt #Agregue un # delante de la línea que contiene el

abf6337cc70c490e948cc8044f175c4b.png

 sed '3, 5s/the/THE/g' test.txt #Reemplazar las líneas 3-5 con THE

71b5a0289c4340a6b6d149c372f44682.png

 sed '/the/s/o/O/g' text.txt #Reemplace la o en la línea que contiene con O

875d669be0624124936f93fb40b7f781.png

3.2, primero haga una copia de seguridad y luego modifique los datos

sed -i.bak 's/SELINUX=deshabilitar/SELINUX=reforzar/' /etc/selinux/config

d358fe725fc7401888e89f16cc698402.png

4. Migrar texto calificado

Parámetros para migrar texto

H:复制到剪贴板;
g、G:将剪贴板中的数据覆盖/追加至指定行;
w:保存为文件;
r:读取指定文件;
a:追加指定内容。具体操作方法如下所示。
I,i   忽略大小写

sed '/the/{H;d};$G' test.txt #La línea que contiene las migraciones al final del archivo, {;} se usa para múltiples operaciones

0a57e4c799f5448bb31ecd92b97ab56b.png

sed '1,5/{H;d};14G' test.txt #Anexar 1-5 líneas a 14 líneas

88fa6556b84f4601968e3faf6c1d7e19.png

 sed '/the/w out.file' text.txt #Guardar la línea que contiene como archivo out.file

b8f8fbe095ed4ff88e2330c2c831a232.png

 sed '/the/r /etc/hostname' text.txt #Agregue el contenido del archivo /etc/hostname a cada línea que contenga el

6299ef7d5aaf460f8a865398e80e9c98.png

sed '3a #####' text.txt #Insertar una nueva línea después de la tercera línea, el contenido es ##### Si es el parámetro i, está en la tercera línea

dc3b052ba2c940ee980198c11cb181fe.png

sed '/the/a #####' text.txt #Insertar una nueva línea después de cada línea que contiene, el contenido es Nuevo

24f83edf0d484f45bc8d2d05f568d3b6.png

 sed '3a #####\n ######' text.txt //Insertar varias líneas de contenido después de la tercera línea, el medio \n significa nueva línea

cddf37d3c79c4f1d8496a0abdad7f9e1.png

5. Edite archivos usando scripts

Use el script sed para almacenar varias instrucciones de edición en un archivo (una instrucción de edición por línea) y llámelo con la opción "-f".

6eb13abbb2e34ab2bae642ab2106f3a5.png
Por ejemplo, ejecute el siguiente comando para transferir el contenido de las líneas 1~5 a la línea 14, que es equivalente a sed '1,5{H;d};14G' text.txt

181b533da31a4503b96887fbfb767c64.png

Nota: Además de ver el número fijo de líneas, puede editar el texto agregando la opción "-i" a todas las demás operaciones. De lo contrario, solo podrá ver los resultados después de la operación y no podrá modificar el texto directamente. .

Por ejemplo, la modificación del contenido del texto anterior

Veamos el contenido después de terminar la operación.

93c78523cd5f4d6492748d4c20494548.png

es constante

añadimos -i

 sed -f sed.sh -i prueba.txt   

830dc61bf7294dcda2d63e8cffe73666.png

 Resumir

        Sed es un comando de edición de texto muy útil, que permite a los usuarios editar texto sin interacción al escribir scripts de shell, lo que reduce en gran medida la cantidad de operaciones humanas. necesito estudiar mucho

Supongo que te gusta

Origin blog.csdn.net/qq_57377057/article/details/126216920
Recomendado
Clasificación