Commandes Linux

Commandement Bash Tac

Commandement Bash Tac
Tac est l'une de ces commandes que vous ne réalisez pas tant que vous ne l'avez pas déjà fait, réinventé la roue, ce qui n'est pas rare dans la pratique de la programmation, que vous appreniez simplement les ficelles du métier ou que vous soyez un professionnel avec des années d'expérience pour vanter, tu es génial. Si vos mains sont propres, tant mieux pour vous ; Quoi qu'il en soit, vous allez vous régaler, je vais décharger tout ce que je sais sur la commande tac et plus encore. Continuer à lire.

Également connu sous le nom de reverse cat, tac est un simple utilitaire de ligne de commande qui vous permet d'inverser les lignes en sortie à l'aide de la commande | opérateur de tuyau intégré et tac. C'est-à-dire que si vous avez une commande, côté gauche (lhs), et que vous voulez inverser le contenu de sa sortie, il vous suffit de taper lhs | tac. C'est ça!

Certes, il y a plus à tac qu'il n'y paraît. Ne t'inquiète pas. Nous couvrirons tout, en temps voulu.

Conseils sur le tac

Utiliser ou ne pas utiliser, telle est la question. Tu ne veux pas tac quand tu n'es pas obligé. Cependant, si vous voulez répandre du tac comme commande de pain et de beurre, c'est à vous de décider. En attendant, voici mon conseil sur tac en prenant les deux côtés pour rester aussi neutre.

Quand utiliser tac

Il y a des moments où utiliser tac qui vous aide à tirer le meilleur parti de la ligne de commande avec moins de code et de temps passé à rechercher les options de commande lhs.

Lorsque vous n'êtes pas sûr des options de lhs

De nombreuses commandes comme sort viennent avec une option pour inverser la sortie d'une commande. Cependant, si vous n'êtes pas sûr si une commande sur le côté gauche a une option -r pour inverser la sortie, l'utilisation de tac est un moyen sûr d'inverser les lignes de sortie.

Quand la performance n'a pas d'importance

Bien qu'insignifiantes, la plupart des commandes utilisées en conjonction avec une option intégrée pour inverser la sortie fonctionnent mieux que de diriger la sortie vers tac. Donc, si un petit décalage de performance n'est pas un problème, vous pouvez utiliser tac pour rejouer la sortie en sens inverse.

Quand ne pas utiliser tac

Il y a des moments où vous ne pouvez pas utiliser tac parce que vous savez mieux. En voici quelques-uns à noter.

Quand vous savez que la commande sur le lhs a une option pour inverser les lignes de sortie

Comme je l'ai dit, "La plupart des commandes sont livrées avec une option pour inverser la sortie.” Si vous savez qu'une commande lhs spécifique a une option, vous ne pouvez pas utiliser tac. Après tout, -r est plus court que - | tac.

Quand la performance compte

Comme je l'ai dit, "L'utilisation de l'option lhs reverse peut être plus performante que tac." Si vous cherchez à gagner quelques secondes dans un script bash ou si vous traitez des fichiers plus volumineux qui nécessitent du temps à lire, vous ne pouvez pas utiliser tac.

Aide tactique

L'exécution de la commande d'aide pour tac ou man tac montre l'utilisation ainsi que les options qui peuvent être utilisées. Voici à quoi s'attendre.

Commandes

tac --help

Production

Version Tac

Quelle version suis-je?
Vous êtes la dernière version de vous-même. Cependant, dans le cas de la version de votre tac, il existe une option pour cela.

Commandes

tac --version

Production

Remarques

Si vous utilisez tac sur FreeBSD ou macOS, l'option longue pour la version peut ne pas être disponible. Dans ce cas, essayez -v ou man tac. Si vous l'avez essayé, faites le moi savoir. je suis curieux. Merci

Options tactiques

A part l'aide et la version, tac n'a pas beaucoup d'options. Pour ce qu'il a, vous êtes sûr de découvrir que tac n'est pas n'importe quel vieux chat inversé.

Tac avant option

L'option -b vous permet de changer la façon dont le séparateur est attaché en sortie. Par défaut, le séparateur de nouvelle ligne est attaché après chaque ligne.

je sais que c'est déroutant. Décomposons-le par exemple.

Tout d'abord, voyons à quoi ressemble notre sortie avant d'utiliser tac -b.

Commandes

séquence 10

Production

Voyons maintenant ce que devient notre sortie après avoir utilisé tac sans -b.

Commandes

séquence 10 | tac

Production

Voyons maintenant ce que la sortie se transforme en utilisant tac -b.

Commandes

séquence 10 | tac -b

Production

Option séparateur Tac

L'option de séparation -s 'chaîne littérale' vous permet de spécifier le caractère ou la séquence de caractères utilisé par tac pour distinguer les lignes. Par défaut, le caractère de nouvelle ligne ('0a' en hexadécimal) est utilisé.

Comment utiliser l'option séparateur tac n'est pas évident au début. Cependant, une fois que vous savez qu'il est là, il est difficile de ne pas essayer de l'utiliser.

Considérons l'exemple suivant, opérant sur des lignes représentées en hexadécimal.

Commandes

séquence 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Production

Remarques

(1) Cela peut sembler trivial car utiliser la séquence 20 | commande tac, cependant, dans ce cas, nous n'avons pas passé de temps à travailler sur le flux de sortie en hexadécimal. L'utilisation de ce modèle est utile lorsque le séparé n'est pas quelque chose de trivial comme le caractère de nouvelle ligne tel que le zéro octet.

Maintenant, essayez moins d'utiliser tac sur quelque chose d'un peu moins brut et plus méta comme du simple HTML.

Considérez le fichier suivant.

Déposer

UNE
B
C

Commandes

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

Production

Nous avons réussi à convertir la page HTML

UNE
B
C

dans

C
B
UNE

à l'aide de tac.

Supposons que vous ayez besoin de faire quelque chose d'un peu plus compliqué comme traiter n'importe quelle balise comme un séparateur tac. Dans ce cas, vous n'allez pas vous en sortir en utilisant uniquement l'option de séparation. C'est là qu'intervient l'option regex. Combiné avec l'option séparateur, il vous permet de faire plus avec la commande tac que d'inverser une ligne dans un fichier. Voici comment.

Option d'expression régulière Tac

L'option regex -r -s 'regex' vous permet de spécifier que la chaîne de séparation doit être traitée comme une expression régulière.

Comment utiliser l'option tac regex est aussi simple que d'ajouter l'option -r avant ou après le séparateur.

Considérons l'exemple précédent utilisant l'option regex en conjonction avec l'option séparateur. Faisons en sorte que tac traite n'importe quelle balise de balisage comme un séparateur.

Déposer



fonctions simples


Les fonctions sont simples dans bash. Au moins celui-ci est. Il met une chaîne sur l'écran.


Commandes


fonction simple
()
écho
aussi simple que possible fonction simple

Source : https://temptemp3.github.io/bash-fonctions

Commandes

déposer ()

écho '



fonctions simples

Les fonctions sont simples dans bash. Au moins celui-ci est. Il met un
chaîne à l'écran.

Commandes



fonction simple

(
)

écho aussi simple que possible

fonction simple
'

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

Production

Nous avons réussi à convertir la page HTML en inversant le fichier à l'aide de balises HTML. Si vous regardez dans les détails, vous remarquerez que ce n'est pas encore parfait.

Commande Tac en pure bash

Voici une version primitive de tac implement en pur bash qui inverse les lignes transmises par une commande lhs. Les versions futures sont laissées en exercice.

#!/bin/bash
## tac
## version 0.0.1 - initiale
#####################################################
tac()
local -a arr
local -i je
mapfile arr -
i="$#arr[@]"
tandis que [ $i -ge 0 ]
fais
echo $arr[i]
laissez i-=1
Fini

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

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

Commande Tac utilisant d'autres commandes

Voici quelques versions primitives de tac implement utilisant d'autres commandes qui inversent les lignes transmises par une commande lhs. Les versions futures sont laissées en exercice.

Avant de commencer, fermez les yeux et réfléchissez : « Qu'est-ce qui pourrait être utilisé pour implémenter une version primitive de tac ??"
De nombreuses commandes me viennent à l'esprit mais je vais me concentrer sur celles pour lesquelles nous avons de la place.

rester bouche bée

Semblable à la commande Tac dans l'exemple pur de bash, pour implémenter tac, nous stockerions d'abord les lignes lues à rejouer à l'envers après que toutes les lignes aient été lues. Voici à quoi cela ressemblerait en utilisant gawk.

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

Essayez maintenant d'utiliser la commande lhs seq 10.

 séquence 10 | gawk '  line[++line[0]]=$(0)  END  for(i=0;i

Comme on peut s'y attendre, la sortie est

Des exercices

1. La fonction lhs() seq 10 ; liste les entiers 1 à 10. Écrivez une commande rhs telle que lhs | rhs est égal à 10864213579 uniquement en utilisant tac (indice : voir l'exemple Tac avant l'option)
2. Inverser la sortie de rhs() find -mindepth 1 -maxdepth 1 -print0 ; en utilisant tac (Indice : voir l'exemple d'option de séparateur Tac)
3. Étendre le tac.sh (dans la commande Tac en bash pur) pour se comporter exactement comme tac. Vous devrez ajouter des options et vous assurer de tester leur comportement.
4. Implémenter une version primitive de tac en pur bash en tant que fonction récursive.

TL;DR

Encore une fois, j'ai aimé écrire la commande Bash tac. Après avoir lu, j'espère que vous conviendrez qu'il y a plus à tac que vous ne le pensiez. De plus, après avoir essayé de faire les choses à la dure vers le bas, j'espère que vous savez à quel point la commande tac pourrait être utile. Si quelqu'un parvient à terminer l'un des exercices ou a besoin d'aide pour ses devoirs, faites le moi savoir. Merci,

SuperTuxKart pour Linux
SuperTuxKart est un excellent titre conçu pour vous apporter l'expérience Mario Kart gratuitement sur votre système Linux. C'est assez stimulant et am...
Tutoriel Bataille pour Wesnoth
The Battle for Wesnoth est l'un des jeux de stratégie open source les plus populaires auxquels vous pouvez jouer en ce moment. Non seulement ce jeu es...
0 A.ré. Didacticiel
Sur les nombreux jeux de stratégie disponibles, 0 A.ré. parvient à se démarquer comme un titre complet et un jeu tactique très profond bien qu'il soit...