LFCS: Cómo usar el comando GNU 'sed' para crear, editar y manipular archivos en Linux - Parte 1


La Fundación Linux anunció la certificación LFCS (Linux Foundation Certified Sysadmin), un nuevo programa que tiene como objetivo ayudar a las personas de todo el mundo a obtener la certificación en tareas de administración de sistemas básicas a intermedias para sistemas Linux. Esto incluye el soporte de sistemas y servicios en ejecución, junto con la resolución de problemas y el análisis de primera mano, y la toma de decisiones inteligente para escalar los problemas a los equipos de ingeniería.

Mire el siguiente video que muestra el programa de certificación de The Linux Foundation.

La serie se llamará Preparación para las partes 1 a 10 de LFCS (Linux Foundation Certified Sysadmin) y cubrirá los siguientes temas para Ubuntu, CentOS y openSUSE:

Esta publicación es la Parte 1 de una serie de 20 tutoriales, que cubrirá los dominios y competencias necesarios que se requieren para el examen de certificación LFCS. Dicho esto, encienda su terminal y comencemos.

Procesamiento de flujos de texto en Linux

Linux trata la entrada y la salida de los programas como flujos (o secuencias) de caracteres. Para comenzar a comprender la redirección y las canalizaciones, primero debemos comprender los tres tipos más importantes de flujos de E/S (entrada y salida), que de hecho son archivos especiales (por convención en UNIX y Linux, flujos de datos y periféricos, o archivos de dispositivo, también se tratan como archivos ordinarios).

La diferencia entre > (operador de redirección) y | (operador de canalización) es que mientras el primero conecta un comando con un archivo, el segundo conecta la salida de un comando con otro. mando.

# command > file
# command1 | command2

Dado que el operador de redirección crea o sobrescribe archivos de forma silenciosa, debemos usarlo con extrema precaución y nunca confundirlo con una canalización. Una ventaja de las canalizaciones en los sistemas Linux y UNIX es que no hay un archivo intermedio involucrado con una canalización: la salida estándar del primer comando no se escribe en un archivo y luego se lee con el segundo comando.

Para los siguientes ejercicios prácticos utilizaremos el poema “ Un niño feliz ” (autor anónimo).

El nombre sed es la abreviatura de editor de flujo. Para aquellos que no están familiarizados con el término, se usa un editor de flujo para realizar transformaciones de texto básicas en un flujo de entrada (un archivo o entrada de una canalización).

El uso más básico (y popular) de sed es la sustitución de caracteres. Comenzaremos cambiando cada aparición de y minúscula a MAYÚSCULAS Y y redirigiendo la salida a ahappychild2.txt . El indicador g indica que sed debe realizar la sustitución de todas las instancias de término en cada línea del archivo. Si se omite este indicador, sed reemplazará solo la primera aparición de término en cada línea.

# sed ‘s/term/replacement/flag’ file
# sed ‘s/y/Y/g’ ahappychild.txt > ahappychild2.txt

Si desea buscar o reemplazar un carácter especial (como /, \ , & ), debe escapar de él, en el término o cadenas de reemplazo, con una barra inclinada hacia atrás.

Por ejemplo, sustituiremos la palabra y por un ampersand. Al mismo tiempo, reemplazaremos la palabra I por cuando la primera se encuentre al principio de una línea.

# sed 's/and/\&/g;s/^I/You/g' ahappychild.txt

En el comando anterior, un ^ (signo de intercalación) es una expresión regular conocida que se usa para representar el comienzo de una línea.

Como puede ver, podemos combinar dos o más comandos de sustitución (y usar expresiones regulares dentro de ellos) separándolos con un punto y coma y encerrando el conjunto entre comillas simples.

Otro uso de sed es mostrar (o eliminar) una parte elegida de un archivo. En el siguiente ejemplo, mostraremos las primeras 5 líneas de /var/log/messages del 8 de junio.

# sed -n '/^Jun  8/ p' /var/log/messages | sed -n 1,5p

Tenga en cuenta que, de forma predeterminada, sed imprime todas las líneas. Podemos anular este comportamiento con la opción -n y luego decirle a sed que imprima (indicado por p ) solo la parte del archivo (o la tubería) que coincide con el patrón (8 de junio al comienzo de la línea en el primer caso y líneas 1 a 5 inclusive en el segundo caso).

Finalmente, puede ser útil al inspeccionar scripts o archivos de configuración para inspeccionar el código en sí y omitir comentarios. El siguiente sed de una sola línea elimina ( d ) líneas en blanco o aquellas que comienzan con # (el carácter | indica un OR booleano entre los dos expresiones).

# sed '/^#\|^$/d' apache2.conf

El comando uniq nos permite informar o eliminar líneas duplicadas en un archivo, escribiendo en stdout por defecto. Debemos tener en cuenta que uniq no detecta líneas repetidas a menos que sean adyacentes. Por lo tanto, uniq se usa comúnmente junto con un sort anterior (que se usa para ordenar líneas de archivos de texto). De forma predeterminada, ordenar toma el primer campo (separado por espacios) como campo clave. Para especificar un campo de clave diferente, necesitamos usar la opción -k .

El comando du –sch/ruta/a/directorio/* devuelve el uso de espacio en disco por subdirectorios y archivos dentro del directorio especificado en formato legible por humanos (también muestra un total por directorio), y no ordene la salida por tamaño, pero por subdirectorio y nombre de archivo. Podemos usar el siguiente comando para ordenar por tamaño.

# du -sch /var/* | sort –h

Puede contar el número de eventos en un registro por fecha al decirle a uniq que realice la comparación utilizando los primeros 6 caracteres (-w 6) de cada línea (donde se especifica la fecha), y prefijando cada uno línea de salida por el número de ocurrencias ( -c ) con el siguiente comando.

# cat /var/log/mail.log | uniq -c -w 6

Por último, puede combinar ordenar y uniq (como suelen ser). Considere el siguiente archivo con una lista de donantes, fecha de donación y monto. Supongamos que queremos saber cuántos donantes únicos hay. Usaremos el siguiente comando para cortar el primer campo (los campos están delimitados por dos puntos), ordenar por nombre y eliminar líneas duplicadas.

# cat sortuniq.txt | cut -d: -f1 | sort | uniq

Lea también : 13 ejemplos de comandos "cat"

grep busca archivos de texto o (salida de comando) la aparición de una expresión regular especificada y genera cualquier línea que contenga una coincidencia con la salida estándar.

Muestra la información de /etc/passwd para el usuario gacanepa, ignorando mayúsculas y minúsculas.

# grep -i gacanepa /etc/passwd

Muestra todo el contenido de /etc cuyo nombre comienza con rc seguido de cualquier número.

# ls -l /etc | grep rc[0-9]

Lea también : 12 ejemplos de comandos "grep"

El comando tr se puede utilizar para traducir (cambiar) o eliminar caracteres de stdin y escribir el resultado en stdout.

Cambie todas las minúsculas a mayúsculas en el archivo sortuniq.txt.

# cat sortuniq.txt | tr [:lower:] [:upper:]

Apriete el delimitador en la salida de ls –l a un solo espacio.

# ls -l | tr -s ' '

El comando cortar extrae partes de las líneas de entrada (de stdin o archivos) y muestra el resultado en la salida estándar, según el número de bytes (opción -b ), caracteres (< b> -c ) o campos ( -f ). En este último caso (basado en campos), el separador de campo predeterminado es una pestaña, pero se puede especificar un delimitador diferente usando la opción -d .

Extraiga las cuentas de usuario y los shells predeterminados que se les asignan de /etc/passwd (la opción –d nos permite especificar el delimitador de campo, y –f El interruptor indica qué campo (s) se extraerán.

# cat /etc/passwd | cut -d: -f1,7

Resumiendo, crearemos un flujo de texto que consiste en el primer y tercer archivo no en blanco de la salida del último comando. Usaremos grep como primer filtro para verificar las sesiones del usuario gacanepa , luego ajustaremos los delimitadores a un solo espacio ( tr -s '' ). A continuación, extraeremos el primer y tercer campo con cortar , y finalmente ordenaremos por el segundo campo (direcciones IP en este caso) que muestra único.

# last | grep gacanepa | tr -s ' ' | cut -d' ' -f1,3 | sort -k2 | uniq

El comando anterior muestra cómo se pueden combinar múltiples comandos y tuberías para obtener datos filtrados de acuerdo con nuestros deseos. Siéntase libre de ejecutarlo también por partes, para ayudarlo a ver la salida que se canaliza de un comando al siguiente (¡por cierto, esta puede ser una gran experiencia de aprendizaje!).

Resumen

Aunque este ejemplo (junto con el resto de los ejemplos del tutorial actual) puede no parecer muy útil a primera vista, son un buen punto de partida para comenzar a experimentar con los comandos que se utilizan para crear, editar y manipular archivos desde Linux. línea de comando. Siéntase libre de dejar sus preguntas y comentarios a continuación, ¡serán muy apreciados!

  1. About the LFCS
  2. Why get a Linux Foundation Certification?
  3. Register for the LFCS exam