El comando sed de Linux aprende la historia de la utilidad sed

  
para leer archivos en línea de memoria por línea. A continuación, realiza todas las operaciones especificadas para la fila y la coloca nuevamente en la memoria después de completar la modificación solicitada para volcarla en el terminal. Después de completar todas las operaciones en esta línea, lee la siguiente línea del archivo y luego repite el proceso hasta que completa el archivo. Sed lee el archivo completo de forma predeterminada y modifica cada una de las líneas, pero puede limitar la operación a la línea especificada según sea necesario. Dos cosas son importantes: el archivo de origen (por defecto) no se modifica, la salida se puede redirigir a otro archivo para guardar los cambios. La sintaxis de uso en Internet es así: sed [opciones] \\ '{comando} \\' [nombre de archivo] [> archivo de salida]

Pero cuando realizo una prueba local, el indicador \\ del comando se informa incorrectamente. Estaría bien reemplazar \\ '{comando} \\' con '{comando}', por lo que se eliminaron los siguientes comandos \\.

Para hacer una edición simple: ‘ s /valor antiguo /valor nuevo /’ [raíz @ localhost, etc.] # echo 1 2 3 |  Sed 's /2/3 /'

1 3 3

Si necesita realizar varios cambios en la misma línea, el método recomendado es: [root @ localhost, etc.] # echo 1 2 3 4 5 |  Sed '> s /2/3 /> s /4/5 />'

1 3 3 5 5

Divide el comando en varias líneas, cada línea es /La bandera termina y finalmente 'cierra todos los comandos.

Para realizar cambios globales: sed continúa procesando la siguiente línea después de encontrar un proyecto para modificar y hacer cambios, sin seguir leyendo el resto de la línea. Cuando el objetivo de la modificación es la línea completa, debe usar la modificación global: [root @ localhost, etc.] # echo 1 2 3 2 4 5 |  Sed 's /2/3 /'

1 3 3 2 4 5

[root @ localhost etc.] # echo 1 2 3 2 4 5 |  Sed 's /2/3 /g'

1 3 3 3 4 5

Cambio condicional:

El siguiente archivo está disponible [root @ localhost root] # cat sample

one 1two 1three 1one 1two 1two 1tree 1

Para cambiar el 1 después de dos a 2, el 1 después de tres se cambia a 3: [root @ localhost root] # sed ' > /two /s /1/2 /> /three /s /1/3 /> '

uno 1two 2three 3one 1two 2two 2tree 3

enviará los cambios a Nuevo archivo guardado: [root @ localhost root] # sed '/two /s /1/2 /; /three /s /1/3 /' sample > sample_one [root @ localhost root] # cat sample_one uno 1two 2three 3one 1two 2two 2tres 3

Use un script escrito previamente para procesar el archivo especificado: [root @ localhost root] # cat sedlist /two /s /1/2 //three /s /1/3 /[ ,null,null,3],Root @ localhost root] # sed -f sedlist sampleone 1two 2three 3one 1two 2tree 2tree 3

Se debe tener en cuenta que ni el archivo sedlist ni el comando sed tienen un '' par de comillas simples .

Procesando la línea especificada:

Reemplace solo 1 de 5 y 6 líneas [root @ localhost root] # sed '5,6 s /1/2 /' sampleone 1two 1three 1one 2wwo 2three 1

sed imprime cada línea del archivo a la pantalla de forma predeterminada, mientras que sed -n cubre todas las pantallas y no se muestra en la pantalla. Pero la combinación de -n y -p produce solo la línea modificada: [root @ localhost root] # cat sedlist /two /s /1/2 /p /three /s /1/3 /p [root @localhost root] # sed -n -f sedlist sampletwo 2three 3two 2two 2three 3

Como puede ver desde arriba, "" one 1 " no se muestra porque no se ha modificado.

Otro uso es mostrar solo un cierto número de líneas, como 2 ~ 6 líneas: [root @ localhost root] # sed -n '2,6p' sampletwo 1three 1one 1two 1two 1

colocar el archivo con dos Elimine la línea: [root @ localhost root] # sed '/two /d' sampleone 1three 1one 1three 1

Elimine todas las líneas excepto dos: [root @ localhost root] # sed '/two /! d 'sampletwo 1two 1two 1

Borre las tres primeras líneas del archivo: [root @ localhost root] # sed' 1,3 d 'sampleone 1two 1two 1tres 1

La parte especial de la eliminación:

Eliminar líneas que comienzan con dos: sed '/^ two /d' sample_one

Eliminar líneas que terminan en dos: sed '/two $ /d' sample_one

Elimine la línea en blanco del archivo: sed '/^ $ /d' sample

Para eliminar el título de un artículo, puede utilizar la siguiente sintaxis: sed '1, /^ $ /d' filename

Agregar e insertar texto:

Use sed y una opción conjunta, $ para agregar contenido al final del artículo: [root @ localhost root] # Sed '$ a 123123123123 sampleone 1two 1three 1one 1two 1tree 1233123123123

Si desea agregar contenido a la tercera línea, el método es: [root @ localhost root] # sed' 3a cccccc 'sampleone 1two 1tree 1cccc 1two 1two 1tres 1

Además de agregar este método, también existe la opción de insertar (-i). Por ejemplo, inserte el contenido en la tercera línea: [root @ localhost root] # sed '3i cccccccc' sampleone 1two 1ccccccccthree 1one 1two 1two 1tree 1

En el proceso de modificación del archivo, también puede leer y escribir simultáneamente. Un archivo: [root @ localhost root] # sed '/two /s /1/2 /; /three /s /1/3 /; 1,3 w sample_two' sampleone 1two 2three 3one 1two 2two 2tree 3 [root @ localhost Raíz] # cat sample_two one 1two 2three 3

El comando anterior envía las líneas 1 ~ 3 modificadas a sample_two a la vez que reemplaza dos y tres 1s correspondientes.

Sed tiene una función de modificación (-c) además de la función de reemplazo. El reemplazo es para un solo proyecto, y la modificación es para toda la fila. [root @ localhost root] # echo two two |  Sed '/two /c dddddddd'dddddddd [root @ localhost root] # echo two two |  Sed /two /dddddddd /'dddddddd two [root @ localhost root] # echo two two |  Sed 's /two /dddddddd /g'dddddddd dddddddd

Los tres comandos anteriores son una buena explicación de sus diferencias.

Salga temprano: sed no tiene que salir después de escanear todos los archivos, por ejemplo, solo las primeras 5 líneas: [root @ localhost root] # sed '5q' sampleone 1two 1three 1one 1two 1

o salga después de cumplir ciertas condiciones (coincida con tres y salga): [root @ localhost root] # sed '/three /q' sampleone 1two 1three 1

Hay algunos casos especiales, como muestra Reemplace dos en el archivo con tres, tres reemplazado con cuatro: [root @ localhost root] # sed 's /two /three /; s /three /four /' sampleone 1four 1four 1one 1four 1four 1four 1four

if De acuerdo con el comando anterior, encontrará que los dos y tres se han convertido en cuatro, lo cual no cumple con nuestros requisitos. [root @ localhost root] # sed 's /three /four /; s /two /three /' sampleone 1three 1four 1one 3three 1four 1four 1

Pero después de que se invierten las dos líneas, se cumplen los requisitos. Al realizar este tipo de operación, debe prestar mucha atención a la forma en que especifica las operaciones y organizarlas en un cierto orden para que las operaciones no se afecten entre sí.

Copyright © Conocimiento de Windows All Rights Reserved