Comandi Linux

Comando Bash Tac

Comando Bash Tac
Tac è uno di quei comandi di cui non ti rendi conto finché non l'hai già fatto, reinventato la ruota, il che non è raro nella pratica della programmazione, sia che tu stia solo imparando le basi o sia un professionista con anni di esperienza per vantati, sei fantastica. Se le tue mani sono pulite, allora buon per te; Ad ogni modo, sei pronto per una sorpresa, scaricherò tutto ciò che so sul comando tac e altro ancora. Continuare a leggere.

Conosciuto anche come reverse cat, tac è una semplice utility da riga di comando che consente di invertire le righe nell'output utilizzando | operatore tubo integrato e tac. Cioè, se hai un comando, sul lato sinistro (lhs), e vuoi invertire il contenuto del suo output, tutto ciò che dovresti fare è digitare lhs | tac. Questo è tutto!

Certo, c'è di più da tac di quanto sembri. Non preoccuparti. Copriremo tutto, in tempo utile.

Consigli su tac

Usare o non usare, questo è il problema. Non vorrai tac quando non devi. Tuttavia, se vuoi diffondere tac come comando di pane e burro, dipende da te. Nel frattempo, ecco il mio consiglio su come prendere entrambe le parti per rimanere neutrali.

Quando usare tac

Ci sono momenti in cui usare tac che ti aiutano a ottenere di più dalla riga di comando con meno codice e tempo speso per la ricerca delle opzioni di comando lhs.

Quando non sei sicuro delle opzioni di lhs

Molti comandi come sort hanno un'opzione per invertire l'output di un comando. Tuttavia, se non sei sicuro che un comando sul lato sinistro abbia o meno un'opzione -r per invertire l'output, l'uso di tac è un modo sicuro per invertire le righe di output.

Quando le prestazioni non contano

Sebbene insignificanti, la maggior parte dei comandi utilizzati in combinazione con un'opzione integrata per invertire l'output ha prestazioni migliori rispetto al collegamento dell'output a tac. Quindi, se un piccolo ritardo nelle prestazioni non è un problema, va bene collegarsi a tac per riprodurre l'output al contrario.

Quando non usare tac

Ci sono momenti in cui potresti non usare tac perché lo sai meglio. Eccone alcuni da notare.

Quando sai che il comando su lhs ha un'opzione per invertire le linee di output

Come ho detto, "La maggior parte dei comandi ha un'opzione per invertire l'output."Se sai che un comando lhs specifico ha un'opzione, non puoi usare tac. Dopotutto, -r è più breve di - | tac.

Quando le prestazioni contano

Come ho detto, "L'uso dell'opzione lhs reverse può dare risultati migliori di tac."Se stai cercando di spremere alcuni secondi in uno script bash o hai a che fare con file più grandi che richiedono tempo per essere letti, potresti non usare tac.

Tac aiuto

L'esecuzione del comando help per tac o man tac mostra l'utilizzo insieme alle opzioni che possono essere utilizzate. Ecco cosa aspettarsi.

Comandi

tac --help

Produzione

Versione Tac

Che versione sono io??
Sei l'ultima versione di te stesso. Tuttavia, nel caso di quale versione sia la tua tattica, c'è un'opzione per questo.

Comandi

tac --version

Produzione

Appunti

Se stai usando tac su FreeBSD o macOS, l'opzione lunga per la versione potrebbe non essere disponibile. In tal caso, prova -v o man tac. Se l'hai provato fammi sapere. io sono curioso. Grazie

Opzioni tattiche

Oltre all'aiuto e alla versione, tac non ha molte opzioni. Per quello che ha, sei sicuro di scoprire che tac non è solo un vecchio gatto inverso.

Tac prima dell'opzione

L'opzione -b ti permette di cambiare il modo in cui il separatore è attaccato nell'output. Per impostazione predefinita, il separatore di nuova riga è attaccato dopo ogni riga.

So che è confuso. Analizziamolo per esempio.

Per prima cosa, vediamo come appare il nostro output prima di usare tac -b.

Comandi

successivo 10

Produzione

Ora vediamo in cosa si trasforma il nostro output dopo aver usato tac senza -b.

Comandi

seq 10 | tac

Produzione

Ora vediamo in cosa si trasforma l'output usando tac -b.

Comandi

seq 10 | tac -b

Produzione

Opzione separatore tac

L'opzione separatore -s 'stringa letterale' consente di specificare il carattere o la sequenza di caratteri utilizzati da tac per distinguere le righe. Per impostazione predefinita, viene utilizzato il carattere di nuova riga ('0a' in esadecimale).

Come utilizzare l'opzione del separatore tattica non è ovvio all'inizio. Tuttavia, una volta che sai che è lì, è difficile non provare a usarlo.

Considera il seguente esempio, operando su linee rappresentate in esadecimale.

Comandi

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

Produzione

Appunti

(1) Potrebbe sembrare banale usare il seq 20 | tac, tuttavia, in quel caso, non abbiamo impiegato tempo a lavorare sul flusso di output in esadecimale. L'uso di questo modello è utile quando il separato non è qualcosa di banale come il carattere di nuova riga come il byte zero.

Ora prova meno a usare tac su qualcosa di un po' meno grezzo e più meta come il semplice HTML.

Considera il seguente file.

File

UN
B
C

Comandi

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

Produzione

Siamo riusciti a convertire la pagina HTML

UN
B
C

in

C
B
UN

usando tac.

Supponiamo che tu debba fare qualcosa di un po' più complicato come trattare qualsiasi tag come un separatore tac. In tal caso, non te la caverai usando solo l'opzione separatore. È qui che entra in gioco l'opzione regex. In combinazione con l'opzione separatore ti consente di fare di più con il comando tac che invertire una riga in un file. Ecco come.

Opzione Tac regex

L'opzione regex -r -s 'regex' consente di specificare che la stringa di separazione deve essere trattata come un'espressione regolare.

Come utilizzare l'opzione tac regex è semplice come aggiungere l'opzione -r prima o dopo il separatore.

Considera l'esempio precedente usando l'opzione regex insieme all'opzione separatore. Facciamo in modo che tac tratti qualsiasi tag di markup come separatore.

File



funzioni semplici


Le funzioni sono semplici in bash. Almeno questo lo è. Mette una stringa sullo schermo.


Comandi


funzione semplice
()
eco
così semplice come diventa funzione semplice

Fonte: https://temptemp3.github.io/bash-funzioni

Comandi

file ()

eco '



funzioni semplici

Le funzioni sono semplici in bash. Almeno questo lo è. Mette un
stringa sullo schermo.

Comandi



funzione semplice

(
)

eco così semplice come diventa

funzione semplice
'

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

Produzione

Siamo riusciti a convertire la pagina HTML invertendo il file utilizzando i tag HTML. Se guardi nei dettagli, noterai che non è ancora perfetto.

Comando Tac in puro bash

Ecco una versione primitiva di tac implement in pura bash che inverte le righe inviate da un comando lhs. Le versioni future sono lasciate per esercizio.

#!/bin/bash
## tac
## versione 0.0.1 - iniziale
#################################################
tac()
locale -a arr
locale -i io
mapfile arr -
i="$#arr[@]"
mentre [ $i -ge 0 ]
fare
echo $arr[i]
lascia i-=1
fatto

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

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

Comando Tac usando altri comandi

Ecco alcune versioni primitive di tac implement usando altri comandi che invertono le linee convogliate da un comando lhs. Le versioni future sono lasciate per esercizio.

Prima di iniziare, chiudi gli occhi e pensa: "Cosa potrebbe essere usato per implementare una versione primitiva di tac??"
Mi vengono in mente molti comandi ma mi concentrerò su quelli per cui abbiamo spazio.

gawk

Simile al comando Tac nell'esempio bash puro, per implementare tac dovremmo prima memorizzare le righe lette per essere riprodotte al contrario dopo che tutte le righe sono state lette. Ecco come apparirebbe usando gawk.

 gawk ' riga[++line[0]]=$(0)  FINE  for(i=0;i

Ora prova a usare il comando lhs seq 10.

 seq 10 | gawk '  riga[++ riga[0]]=$(0)  FINE  for(i=0;i

Come ci si aspetterebbe, l'output è

Esercizi

1. La funzione lhs() seq 10 ; elenca gli interi da 1 a 10. Scrivi un comando rhs tale che lhs | rhs è uguale a 10864213579 solo usando tac (Suggerimento: vedi Tac prima dell'esempio dell'opzione)
2. Inverti l'output di rhs() find -mindepth 1 -maxdepth 1 -print0 ; using tac (Suggerimento: vedere l'esempio dell'opzione separatore Tac)
3. Estendi tac.sh (nel comando Tac in bash puro) per comportarsi esattamente come tac. Dovrai aggiungere opzioni e assicurarti di testare il loro comportamento.
4. Implementa una versione primitiva di tac in pure bash come funzione ricorsiva.

TL;DR

Ancora una volta, mi è piaciuto scrivere il comando tac Bash. Dopo aver letto, spero che tu possa essere d'accordo sul fatto che c'è più da tac di quanto pensassi. Inoltre, dopo aver provato a fare le cose nel modo più duro vicino al fondo, spero che tu sappia quanto potrebbe essere utile il comando tac. Se qualcuno riesce a completare uno qualsiasi degli esercizi o ha bisogno di aiuto per i compiti, me lo faccia sapere. Grazie,

Tutorial Battaglia per Wesnoth
The Battle for Wesnoth è uno dei giochi di strategia open source più popolari a cui puoi giocare in questo momento. Non solo questo gioco è in svilupp...
0 A.D. Tutorial
Tra i tanti giochi di strategia in circolazione, 0 A.D. riesce a distinguersi come un titolo completo e un gioco molto profondo e tattico nonostante s...
Tutorial Unity3D
Introduzione a Unity 3D Unity 3D è un potente motore di sviluppo di giochi. È multipiattaforma cioè ti permette di creare giochi per mobile, web, desk...