Comandos de Linux

Comando Bash Tac

Comando Bash Tac
Tac es uno de esos comandos de los que no te das cuenta hasta que ya lo has hecho, reinventado la rueda, lo cual no es infrecuente en la práctica de la programación tanto si estás aprendiendo las cuerdas como si eres un profesional con años de experiencia presumir, eres increíble. Si sus manos están limpias, entonces bien por usted; De cualquier manera, te espera un regalo, voy a descargar todo lo que sé sobre el comando tac y más. Sigue leyendo.

También conocido como gato inverso, tac es una utilidad de línea de comandos simple que le permite invertir las líneas en la salida usando el | operador de tubería incorporado y tac. Es decir, si tiene un comando, en el lado izquierdo (lhs) y desea invertir el contenido de su salida, todo lo que debe hacer es escribir lhs | tac. Eso es!

Es cierto que hay más en tac de lo que parece. No te preocupes. Lo cubriremos todo a su debido tiempo.

Consejos sobre tac

Usar o no usar, esa es la cuestión. No lo harás, no querrás hacer tac cuando no tengas que hacerlo. Sin embargo, si desea extender el tac como su comando de pan y mantequilla, eso depende de usted. Mientras tanto, aquí está mi consejo sobre el tac tomar ambos lados para permanecer neutrales.

Cuando usar tac

Hay ocasiones en las que usar tac que le ayuda a sacar más provecho de la línea de comando con menos código y menos tiempo dedicado a investigar las opciones de comando de lhs.

Cuando no está seguro de las opciones de lhs

Muchos comandos como sort vienen con una opción para revertir la salida de un comando. Sin embargo, si no está seguro de si un comando en el lado izquierdo tiene o no una opción -r para invertir la salida, usar tac es una forma segura de invertir las líneas de salida.

Cuando el rendimiento no importa

Aunque insignificante, la mayoría de los comandos utilizados junto con una opción incorporada para revertir la salida funcionan mejor que conectar la salida a tac. Entonces, si un pequeño retraso en el rendimiento no es un problema, conectar en tac para reproducir la salida en reversa está bien.

Cuando no usar tac

Hay momentos en los que no puede usar tac porque sabe mejor. Aquí hay algunos para tener en cuenta.

Cuando sepa que el comando en el lhs tiene una opción para invertir las líneas de salida

Como dije, "La mayoría de los comandos vienen con una opción para invertir la salida."Si sabe que un comando lhs específico tiene una opción, no puede usar tac. Después de todo, -r es más corto que - | tac.

Cuando el rendimiento importa

Como dije, "Usar la opción inversa de lhs puede funcionar mejor que tac."Si está buscando exprimir unos segundos en un script bash o está tratando con archivos más grandes que requieren tiempo para leerse, no puede usar tac.

Tac ayuda

Ejecutar el comando de ayuda para tac o man tac muestra el uso junto con las opciones que pueden usarse. Esto es lo que puede esperar.

Comandos

tac --ayuda

Producción

Versión tac

¿Qué versión soy yo??
Eres la última versión de ti mismo. Sin embargo, en el caso de la versión de su tac, hay una opción para eso.

Comandos

tac --versión

Producción

Notas

Si está utilizando tac en FreeBSD o macOS, es posible que la opción larga para la versión no esté disponible. En ese caso, intente -v o man tac. Si lo has probado, avísame. Tengo curiosidad. Gracias

Opciones de tac

Además de la ayuda y la versión, tac no tiene muchas opciones. Por lo que tiene, seguro que descubrirás que tac no es un gato al revés cualquiera.

Tac antes de la opción

La opción -b le permite cambiar cómo se adjunta el separador en la salida. De forma predeterminada, el separador de nueva línea se adjunta después de cada línea.

Se que es confuso. Vamos a desglosarlo con el ejemplo.

Primero, veamos cómo se ve nuestra salida antes de usar tac -b.

Comandos

seq 10

Producción

Ahora veamos en qué se convierte nuestra salida después de usar tac sin -b.

Comandos

seq 10 | tac

Producción

Ahora veamos en qué se convierte la salida usando tac -b.

Comandos

seq 10 | tac -b

Producción

Opción de separador Tac

La opción de separador -s 'cadena literal' le permite especificar el carácter o la secuencia de caracteres utilizados por tac para distinguir las líneas. De forma predeterminada, se utiliza el carácter de nueva línea ('0a' en hexadecimal).

Cómo usar la opción de separador tac no es obvio al principio. Sin embargo, una vez que sepa que está ahí, es difícil no intentar usarlo.

Considere el siguiente ejemplo, operando en líneas representadas en hexadecimal.

Comandos

seq 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Producción

Notas

(1) Puede parecer trivial usar la secuencia 20 | comando tac, sin embargo, en ese caso, no pasamos tiempo trabajando en el flujo de salida en hexadecimal. El uso de este patrón es útil cuando la separación no es algo trivial como el carácter de nueva línea, como el byte cero.

Ahora menos, intente usar tac en algo un poco menos crudo y más meta como HTML simple.

Considere el siguiente archivo.

Archivo

A
B
C

Comandos

file () echo -e "A
B
C
";
archivo | tac -s "
"

Producción

Logramos convertir la página HTML

A
B
C

dentro

C
B
A

usando tac.

Suponga que necesita hacer algo un poco más complicado, como tratar cualquier etiqueta como un separador de tac. En ese caso, no se saldrá con la suya con solo usar la opción de separador solo. Ahí es donde entra la opción de expresiones regulares. Combinado con la opción de separador, le permite hacer más con el comando tac que invertir una línea en un archivo. Así es cómo.

Opción tac regex

La opción de expresiones regulares -r -s 'regex' le permite especificar que la cadena de separación debe tratarse como una expresión regular.

Cómo usar la opción tac regex es tan simple como agregar la opción -r antes o después del separador.

Considere el ejemplo anterior usando la opción regex junto con la opción de separador. Hagamos que tac trate cualquier etiqueta de marcado como un separador.

Archivo



funciones simples


Las funciones son simples en bash. Al menos este es. Pone una cuerda en la pantalla.


Comandos


función simple
()
eco
tan simple como se pone función simple

Fuente: https: // temptemp3.github.io / bash-functions

Comandos

expediente ()

eco '



funciones simples

Las funciones son simples en bash. Al menos este es. Pone un
cuerda en la pantalla.

Comandos



función simple

(
)

eco tan simple como se pone

función simple
'

archivo | tac -r -s "] *."

Producción

Logramos convertir la página HTML invirtiendo el archivo usando etiquetas HTML. Si observa los detalles, notará que aún no es perfecto.

Comando tac en puro bash

Aquí hay una versión primitiva de tac implement en bash puro que invierte las líneas canalizadas por un comando lhs. Las versiones futuras se dejan como ejercicio.

#!/ bin / bash
## tac
## versión 0.0.1 - inicial
##########################################################################################################################################################################################################################################################################################
tac ()
local -a arr
local -i i
mapfile arr -
i = "$ # arr [@]"
mientras que [$ i -ge 0]
hacer
echo $ arr [i]
sea ​​i- = 1
hecho

###############################################
tac
##########################################################################################################################################################################################################################################################################################

Fuente: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh

Comando Tac usando otros comandos

Aquí hay algunas versiones primitivas de tac implement que usan otros comandos que invierten las líneas ingresadas por un comando lhs. Las versiones futuras se dejan como ejercicio.

Antes de comenzar, cierre los ojos y piense: "¿Qué podría usarse para implementar una versión primitiva de tac?"
Me vienen a la mente muchos comandos, pero me centraré en aquellos para los que tenemos espacio.

papar moscas

Similar al comando Tac en el ejemplo puro de bash, para implementar tac, primero almacenaríamos las líneas leídas para que se reproduzcan al revés después de que se lean todas las líneas. Así es como se vería usando gawk.

 gawk 'línea [++ línea [0]] = $ (0) END para (i = 0; i

Ahora intente usar el comando lhs seq 10.

 seq 10 | gawk 'línea [++ línea [0]] = $ (0) END para (i = 0; i

Como era de esperar, la salida es

Ejercicios

1. La función lhs () seq 10; enumera los números enteros del 1 al 10. Escriba un comando rhs tal que lhs | rhs es igual a 10864213579 solo usando tac (Sugerencia: vea Tac antes del ejemplo de opción)
2. Invierta la salida de rhs () find -mindepth 1 -maxdepth 1 -print0; usando tac (Sugerencia: consulte el ejemplo de la opción de separador de Tac)
3. Extender tac.sh (en el comando Tac en bash puro) para comportarse exactamente como tac. Deberá agregar opciones y asegurarse de probar su comportamiento.
4. Implementar una versión primitiva de tac en bash puro como función recursiva.

TL; DR

Nuevamente, disfruté escribiendo el comando Bash tac. Después de leer espero que estés de acuerdo en que hay más en tac de lo que pensabas. Además, después de intentar hacer las cosas de la manera más difícil cerca del final, espero que sepas lo útil que podría ser el comando tac. Si alguien logra completar alguno de los ejercicios o necesita ayuda con su tarea, hágamelo saber. Gracias,

Cómo cambiar los botones izquierdo y derecho del mouse en una PC con Windows 10
Es una norma que todos los dispositivos de mouse de computadora estén diseñados ergonómicamente para usuarios diestros. Pero hay dispositivos de mouse...
Emule los clics del mouse colocando el mouse con Clickless Mouse en Windows 10
El uso excesivo de un mouse o teclado en una postura incorrecta puede provocar muchos problemas de salud, como tensión, síndrome del túnel carpiano y ...
Agregue gestos del mouse a Windows 10 con estas herramientas gratuitas
En los últimos años, las computadoras y los sistemas operativos han evolucionado enormemente. Hubo un momento en que los usuarios tenían que usar coma...