15 consejos y trucos útiles sobre el comando ‘sed’ para las tareas diarias de administración del sistema Linux

Cada administrador del sistema tiene que lidiar con archivos de texto sin formato a diario. Saber cómo ver ciertas secciones, cómo reemplazar palabras y cómo filtrar el contenido de esos archivos son habilidades que debe tener a mano sin tener que hacer una búsqueda en Google.

Ejemplos de comandos Sed de Linux15 consejos y trucos útiles sobre el comando ‘sed’ para Linux

En este artículo revisaremos sed, el conocido editor de transmisiones, y compartiremos 15 consejos para usarlo a fin de lograr los objetivos mencionados anteriormente, y más.

1. Visualización de un rango de líneas de un documento

Herramientas como head y tail nos permiten ver la parte inferior o superior de un archivo. ¿Qué pasa si necesitamos ver una sección en el medio? El siguiente sed one-liner devolverá las líneas 5 a 10 de myfile.txt :

# sed -n '5,10p' myfile.txt

2. Ver todo el archivo excepto un rango determinado

Por otro lado, es posible que desee imprimir todo el archivo excepto un cierto rango. Para excluir las líneas 20 a 35 de myfile.txt , haga lo siguiente:

# sed '20,35d' myfile.txt

3. Visualización de líneas y rangos no consecutivos

Es posible que esté interesado en un conjunto de líneas no consecutivas o en más de un rango. Vamos a mostrar las líneas 5-7 y 10-13 de myfile.txt :

# sed -n -e '5,7p' -e '10,13p' myfile.txt

Como puede ver, la -eopción nos permite ejecutar una acción determinada (en este caso, imprimir líneas) para cada rango.

4. Reemplazo de palabras o caracteres (sustitución básica)

Para reemplazar cada instancia de la palabra versioncon storyen myfile.txt , haga:

# sed 's/version/story/g' myfile.txt

Además, es posible que desee considerar usar en gilugar de gpara ignorar las mayúsculas y minúsculas:

# sed 's/version/story/gi' myfile.txt

Para reemplazar varios espacios en blanco con un solo espacio, usaremos la salida de ip route showy una canalización:

# ip route show | sed 's/  */ /g'

Compare la salida de ip route showcon y sin la canalización:

Reemplazar palabras o caracteres en el archivoReemplazar palabras o caracteres en el archivo

5. Reemplazo de palabras o caracteres dentro de un rango

Si está interesado en reemplazar palabras solo dentro de un rango de línea ( 30 a 40 , por ejemplo), puede hacer lo siguiente:

# sed '30,40 s/version/story/g' myfile.txt

Por supuesto, puede indicar una sola línea a través de su número correspondiente en lugar de un rango.

6. Uso de expresiones regulares (sustitución avanzada): I

A veces, los archivos de configuración se cargan con comentarios. Si bien esto es ciertamente útil, a veces puede ser útil mostrar solo las directivas de configuración si desea verlas todas de un vistazo.

Para eliminar las líneas vacías o las que comienzan con #del archivo de configuración de Apache, haga lo siguiente:

# sed '/^#|^$| *#/d' httpd.conf

El signo de intercalación seguido del signo de número (^#)indica el comienzo de una línea, mientras que ^$representa líneas en blanco. Las barras verticales indican operaciones booleanas, mientras que la barra inclinada hacia atrás se usa para escapar de las barras verticales.

En este caso particular, el archivo de configuración de Apache tiene líneas que #’sno están al principio de algunas líneas, por lo que también *#se usa para eliminarlas.

7. Uso de expresiones regulares (sustitución avanzada) – II

Para reemplazar una palabra que comienza con mayúsculas o minúsculas por otra palabra, también podemos usar sed. Para ilustrar, reemplacemos la palabra zip o Zip con rar en myfile.txt :

# sed 's/[Zz]ip/rar/g' myfile.txt

No se pierda: use Awk con expresiones regulares para filtrar texto en archivos

8. Visualización de líneas que contienen con un patrón determinado

Otro uso de sed consiste en imprimir las líneas de un archivo que coinciden con una expresión regular dada. Por ejemplo, es posible que nos interese ver las actividades de autorización y autenticación que tuvieron lugar el 2 de julio , según el registro / var / log / secure en un servidor CentOS 7 .

En este caso, el patrón a buscar es el 2 de julio al comienzo de cada línea:

# sed -n '/^Jul  1/ p' /var/log/secure

Ver registros (líneas) de una fecha determinadaVer registros (líneas) de una fecha determinada

9. Insertar espacios en archivos

Con sed , también podemos insertar espacios (líneas en blanco) para cada línea no vacía en un archivo. Para insertar una línea en blanco cada dos líneas en LICENCIA , un archivo de texto sin formato, haga lo siguiente:

# sed G myfile.txt

Para insertar dos líneas en blanco, haga:

# sed 'GG' myfile.txt

Agregue una G mayúscula separada por un punto y coma si desea agregar más líneas en blanco. La siguiente imagen ilustra el ejemplo descrito en esta sugerencia:

Insertar espacios en archivoInsertar espacios en archivo

Este consejo puede resultar útil si desea inspeccionar un archivo de configuración de gran tamaño. Insertar un espacio en blanco cada dos líneas y canalizar la salida a menos resultará en una experiencia de lectura más amigable.

10. Emulando dos2unix con edición en línea

El programa dos2unix convierte archivos de texto sin formato de formato Windows / Mac a Unix / Linux, eliminando los caracteres de nueva línea ocultos insertados por algunos editores de texto utilizados en esas plataformas. Si no está instalado en su sistema Linux, puede imitar su funcionalidad con sed en lugar de instalarlo.

En la imagen de la izquierda podemos ver varios caracteres de nueva línea de DOS (^M), que luego fueron eliminados con:

# sed -i 's/r//' myfile.txt

Archivos de texto encubiertos de Windows a LinuxArchivos de texto encubiertos de Windows a Linux

Tenga en cuenta que la -iopción indica edición in situ. Entonces, los cambios no se devolverán a la pantalla, sino que se guardarán en el archivo.

Nota : Puede insertar caracteres de nueva línea de DOS mientras edita un archivo en el editor vim con Ctrl+Vy Ctrl+M.

11. Edición in situ y copia de seguridad del archivo original.

En el consejo anterior usamos sed para modificar un archivo pero no guardamos el archivo original. A veces es una buena idea guardar una copia de seguridad del archivo original por si acaso.

Para ello, indique un sufijo después de la -iopción (entre comillas simples) que se utilizará para cambiar el nombre del archivo original.

En el siguiente ejemplo reemplazaremos todas las instancias de this o This (ignorando mayúsculas y minúsculas) con eso en myfile.txt , y &ltstrong&gtguardaremos&lt/strong&gt el archivo original como myfile.txt.orig .

Finalmente, usaremos la utilidad diff para identificar las diferencias entre ambos archivos:

# sed -i'.orig' 's/this/that/gi' myfile.txt

Utilice sed para editar y hacer una copia de seguridad del archivo originalUtilice sed para editar y hacer una copia de seguridad del archivo original

12. Cambio de pares de palabras

Supongamos que tiene un archivo que contiene nombres completos en el formato Nombre , Apellido . Para procesar adecuadamente el archivo, es posible que desee cambiar Apellido y Nombre .

Podemos hacer eso con sed con bastante facilidad:

# sed 's/^(.*),(.*)$/, /g' names.txt

Cambiar palabras en archivoCambiar palabras en archivo

En la imagen de arriba podemos ver que los paréntesis, al ser caracteres especiales, deben escaparse, al igual que los números 1 y 2 .

Estos números representan las expresiones regulares resaltadas (que deben aparecer entre paréntesis):

  1. 1 representa el comienzo de cada línea hasta la coma.
  2. 2 es un marcador de posición para todo lo que está a la derecha de la coma al final de la línea.

La salida deseada se indica en el formato SecondColumn ( Apellido ) + coma + espacio + FirstColumn ( Nombre ). Siéntase libre de cambiarlo a lo que desee.

13. Reemplazo de palabras solo si se encuentra una coincidencia separada

A veces, reemplazar todas las instancias de una palabra determinada, o unas pocas al azar, no es precisamente lo que necesitamos. Quizás necesitemos realizar el reemplazo si se encuentra una coincidencia separada.

Por ejemplo, es posible que deseemos reemplazar start con stop solo si la palabra servicios se encuentra en la misma línea. En ese escenario, esto es lo que sucederá:

We need to start partying at work,
but let’s remember to start all services first.

En la primera línea, inicio no se reemplazará por detener, ya que la palabra servicios no aparece en esa línea, a diferencia de la segunda línea.

# sed '/services/ s/start/stop/g' msg.txt

Reemplazar palabras en archivoReemplazar palabras en archivo

14. Realización de dos o más sustituciones a la vez

Puede combinar dos o más sustituciones con un solo comando sed . Reemplacemos las palabras that y line en myfile.txt con This y verse, respectivamente.

Observe cómo esto se puede hacer usando un comando de sustitución sed ordinario seguido de un punto y coma y un segundo comando de sustitución:

# sed -i 's/that/this/gis/line/verse/gi' myfile.txt

Este consejo se ilustra en la siguiente imagen:

Reemplazar varias palabras en un archivoReemplazar varias palabras en un archivo

15. Combinar sed y otros comandos

Por supuesto, sed se puede combinar con otras herramientas para crear comandos más potentes. Por ejemplo, usemos el ejemplo dado en TIP # 4 y extraiga nuestra dirección IP de la salida del ip routecomando.

Comenzaremos imprimiendo solo la línea donde está la palabra src. Luego, convertiremos varios espacios en uno solo. Finalmente, cortaremos el noveno campo (considerando un solo espacio como separador de campo), que es donde está la dirección IP:

# ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

La siguiente imagen ilustra cada paso del comando anterior:

Combinar sed con otros comandosCombinar sed con otros comandos

Resumen

En esta guía, hemos compartido 15 consejos y trucos de sed para ayudarlo con sus tareas diarias de administración del sistema. ¿Hay algún otro consejo que utilice con regularidad y le gustaría compartir con nosotros y el resto de la comunidad?

Si es así, no dude en hacérnoslo saber utilizando el formulario de comentarios a continuación. Las preguntas y los comentarios también son bienvenidos. ¡Esperamos tener noticias suyas!

No se pierda: Dominar el comando ‘Awk’ de Linux con consejos y trucos

Sed Command

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux