GNU/Linux >> Tutoriales Linux >  >> Linux

Primeros pasos con el comando tac de Linux

El tac el comando es esencialmente el gato comando, pero su propósito es concatenar archivos a la inversa. Como gato , tiene un conveniente modo alternativo para imprimir en salida estándar (STDOUT) si no se proporciona ningún archivo de salida, lo que lo convierte en uno de esos comandos que se usan más a menudo como un buscapersonas perezoso, como menos y más —que la función que le da nombre.

El gato el comando a menudo se usa en exceso y se abusa de él, y tac a menudo se toma como un comando de broma como ddate o vaquera . A menudo aparece en los artículos del Día de los Inocentes que detallan los estúpidos trucos de la terminal. Entonces, puede ser una sorpresa que tac en realidad tiene una razón legítima para existir.

En realidad es un comando útil.

¿Cuál es el propósito de tac?

El tac La página de manual hace un trabajo bastante pobre al describir su propia función:

Write each FILE to standard output, last line first.

Tomando esa declaración tal como está escrita, tac debe imprimir la última línea de un archivo, luego imprimir el archivo comenzando desde la línea uno:

$ cat metasyntactic.list
foobar
foo
bar
baz

$ tac metasyntactic.list
baz
foobar
foo
bar

Sin embargo, eso no es lo que hace. Su página de información es mucho más clara:

copies each FILE (‘-’ means standard input), 
or standard input if none are given,
to standard output, reversing the records
(lines by default) in each separately.

Por ejemplo:

$ tac metasyntactic.list
baz
bar
foo
foobar

Ignorando el hecho de que tac te da todo al revés, tiene algunas opciones sorprendentemente útiles y únicas.

Tac y separadores

Como indica la página de información, el archivo no tiene que estar delimitado por línea, lo que significa que tac es igualmente efectivo con, por ejemplo, un archivo CSV. El carácter separador de un archivo se define con --separator o -s opción, junto con el delimitador utilizado en el archivo.

Para un archivo CSV, el carácter probablemente sea una coma (, ), pero puede definir cualquier carácter. Sin embargo, si un archivo no termina con el carácter separador, obtendrá un resultado inesperado:

$ tac --separator="," metasyntactic.csv
bazbar,foo,foobar

No hay ningún carácter separador entre los dos primeros elementos. El registro final del archivo (la cadena que sigue al separador final, en este caso, una coma) no va seguido de una coma, por lo que tac lo trata como si no fuera un registro. . Para dar cuenta de este problema, use --before o -b opción, que coloca el carácter separador antes de cada registro:

$ tac --separator="," --before metasyntactic.csv
baz,bar,foo,foobar

El carácter separador no tiene que ser un solo carácter. También puede ser una expresión regular (regex).

Tac y expresiones regulares

Una explicación completa de expresiones regulares está fuera del alcance de este artículo, pero vale la pena mencionar que POSIX extendido es compatible con una variable de entorno. La expresión regular extendida mejora en gran medida la legibilidad de una expresión regular y, en aras de la simplicidad, eso es lo que usa este ejemplo. Suponga que tiene un archivo que contiene cadenas, todas separadas por números enteros:

$ cat metasyntactic.txt
foobar123foo456bar789baz898

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Puede predecir de forma fiable que las cadenas que le interesan están separadas por números enteros, pero no puede predecir de forma fiable cuáles serán esos números enteros. Ese es exactamente el problema que la expresión regular debe resolver.

Para usar expresiones regulares en su tac comando, utilice --regex o -r opción antes de su --separator definición. Además, a menos que ya esté configurado en su entorno, debe activar el REG_EXTENDED Variable ambiental. Puede establecer esta variable en cualquier cosa menos cero para activarla, y puede hacerlo de todas las formas habituales:

  • Exporte la variable para la sesión de shell que está utilizando.
  • Establezca la variable de entorno en su archivo de configuración de shell (como ~/.bashrc ).
  • Anteponga la variable de entorno al tac comando (en Bash, Zsh y similares), como se muestra en el siguiente ejemplo:
$ REG_EXTENDED=1 tac --regex \
--separator='[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1

Sin embargo, la opción regex no maneja bien los registros no terminados, incluso usando --before opción. Es posible que deba ajustar su archivo de origen si esa característica es importante para usted.

Cuándo usar tac

Estas sencillas pero útiles opciones de análisis hacen que tac Vale la pena usarlo como un comando de análisis minimalista y sin complicaciones. Para aquellos trabajos simples para los que no vale la pena escribir una expresión AWK o Perl, tac podría ser una solución sensata.

El tac El comando es limitado, obviamente, porque no manipula los registros de ninguna manera aparte de invertirlos. Pero a veces esa es la única manipulación de lista que necesita.

Por ejemplo, si está empaquetando software para su distribución, no es inusual tener una lista de dependencias que se requieren para la instalación. Dependiendo de cómo recopiló esta lista, puede tenerla en el orden en que estableció que las dependencias eran necesarias en lugar del orden en que deben instalarse.

Esta práctica es relativamente común porque los errores del compilador afectan primero a las dependencias de alto nivel. Es decir, si a su sistema le falta libavcodec luego GCC se detiene y te alerta; pero dado que GCC no ha tenido la oportunidad de sondear su sistema en busca de libvorbis y libvpx , por ejemplo, no puede decirle que esas dependencias también faltan (y, a menudo, es necesario que existan en su sistema antes de compilar libavcodec ).

Por lo tanto, su lista de dependencia crece de forma descendente a medida que descubre qué bibliotecas necesita su sistema para construir las bibliotecas que necesitan las bibliotecas (y así sucesivamente). Al final de dicho proceso, tac es la manera rápida y fácil de revertir esa lista.

Otra molestia común son los archivos de registro. Las entradas generalmente se agregan a un archivo de registro, por lo que los administradores usan tail para ver los últimos errores. Eso funciona bien, pero hay ocasiones en las que desea ver un "trozo" de entradas sin saber cuánto debe retroceder. El tac comando canalizado a menos o más coloca las últimas entradas en la parte superior de la pantalla.

Finalmente, muchos archivos de configuración no tienen un marcador de terminación claro para una sección determinada. Puedes buscar awk y sed comandos para idear una forma de determinar cuándo finaliza un bloque en un archivo de configuración, o puede usar tac para invertir el orden de modo que una vez que su analizador haya encontrado la primera entrada relevante en ese bloque, también sepa cuándo detener leyendo, porque lo que antes era el encabezado ahora es un pie de página.

Activar

Hay muchos otros usos excelentes para tac , y probablemente un montón de razones por las que tac es demasiado rudimentario para ser una solución. Sin embargo, es probable que su sistema lo tenga instalado, así que recuerde este comando la próxima vez que encuentre ese caso límite en su flujo de trabajo que realmente necesita estar en tac ked al revés.


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Verifique el estado del archivo en Linux con el comando stat

  3. Primeros pasos con el comando cat de Linux

  4. Ordenar comando en Linux con ejemplos

  5. Comenzando con ls

Primeros pasos con el sistema operativo Linux

Comando WC de Linux con ejemplos

Primeros pasos con el comando Tar

Uso del comando Linux mv con ejemplos

Asegure Linux con el archivo Sudoers

Comando de montaje de Linux con ejemplos