GNU/Linux >> Tutoriels Linux >  >> Linux

Premiers pas avec la commande Linux tac

Le tac la commande est essentiellement le cat commande, mais son but est de concaténer des fichiers à l'envers. Comme chat , il dispose d'un mode de secours pratique pour imprimer sur la sortie standard (STDOUT) si aucun fichier de sortie n'est fourni, ce qui en fait l'une de ces commandes qui sont plus souvent utilisées comme téléavertisseur paresseux, comme moins et plus —que la fonction pour laquelle il est nommé.

Le chat la commande est souvent surutilisée et maltraitée, et tac est souvent considéré comme une commande de plaisanterie comme ddate ou cowsay . Il est souvent présenté dans les articles du poisson d'avril détaillant des trucs stupides sur les terminaux. Donc, il peut être surprenant que tac a en fait une raison légitime d'exister.

C'est en fait une commande utile.

Quel est le but du tac ?

Le tac La page de manuel décrit assez mal sa propre fonction :

Write each FILE to standard output, last line first.

Prenant cette déclaration telle qu'elle est écrite, tac doit imprimer la dernière ligne d'un fichier, puis imprimer le fichier en recommençant à la première ligne :

$ cat metasyntactic.list
foobar
foo
bar
baz

$ tac metasyntactic.list
baz
foobar
foo
bar

Ce n'est pas ce qu'il fait, cependant. Sa page d'informations est beaucoup plus claire :

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.

Par exemple :

$ tac metasyntactic.list
baz
bar
foo
foobar

Ignorer le fait que tac vous donne tout à l'envers, il a quelques options étonnamment utiles et uniques.

Tac et séparateurs

Comme l'indique la page d'informations, le fichier n'a pas besoin d'être délimité par une ligne, ce qui signifie que tac est tout aussi efficace avec, par exemple, un fichier CSV. Vous définissez le caractère séparateur d'un fichier avec le --separator ou -s option, ainsi que le délimiteur utilisé dans le fichier.

Pour un fichier CSV, le caractère est probablement une virgule (, ), mais vous pouvez définir n'importe quel caractère. Si un fichier ne se termine pas par le caractère de séparation, vous obtenez un résultat inattendu :

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

Il n'y a pas de caractère séparateur entre les deux premiers éléments. L'enregistrement final du fichier (la chaîne suivant le séparateur final, dans ce cas, une virgule) n'est pas lui-même suivi d'une virgule, il est donc traité comme un non-enregistrement par tac . Pour tenir compte de ce problème, utilisez le --before ou -b option, qui place le caractère de séparation avant chaque enregistrement :

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

Le caractère de séparation ne doit pas nécessairement être un seul caractère. Il peut également s'agir d'une expression régulière (regex).

Tac et expressions régulières

Une explication complète de regex est hors de portée de cet article, mais il convient de mentionner que POSIX étendu est pris en charge au moyen d'une variable d'environnement. L'expression régulière étendue améliore considérablement la lisibilité d'une expression régulière et, par souci de simplicité, c'est ce que cet exemple utilise. Supposons que vous ayez un fichier contenant des chaînes toutes séparées par des entiers :

$ cat metasyntactic.txt
foobar123foo456bar789baz898

Plus de ressources Linux

  • Aide-mémoire des commandes Linux
  • Aide-mémoire des commandes Linux avancées
  • Cours en ligne gratuit :Présentation technique de RHEL
  • Aide-mémoire sur le réseau Linux
  • Aide-mémoire SELinux
  • Aide-mémoire sur les commandes courantes de Linux
  • Que sont les conteneurs Linux ?
  • Nos derniers articles Linux

Vous pouvez prédire de manière fiable que les chaînes qui vous intéressent sont séparées par des entiers, mais vous ne pouvez pas prédire de manière fiable ce que seront ces entiers. C'est exactement le problème que regex est censé résoudre.

Pour utiliser regex dans votre tac commande, utilisez la --regex ou -r option avant votre --séparateur définition. De plus, à moins qu'il ne soit déjà défini dans votre environnement, vous devez activer le REG_EXTENDED variables d'environnement. Vous pouvez définir cette variable sur n'importe quoi sauf zéro pour l'activer, et vous pouvez le faire de toutes les manières habituelles :

  • Exportez la variable pour la session shell que vous utilisez.
  • Définissez la variable d'environnement dans votre fichier de configuration de shell (comme ~/.bashrc ).
  • Ajouter la variable d'environnement au début du tac commande (dans Bash, Zsh et similaire), comme illustré dans l'exemple ci-dessous :
$ REG_EXTENDED=1 tac --regex \
--separator='[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1

L'option regex ne gère pas bien les enregistrements non terminés, même en utilisant le --before option. Vous devrez peut-être ajuster votre fichier source si cette fonctionnalité est importante pour vous.

Quand utiliser tac

Ces options d'analyse simples mais utiles font de tac vaut la peine d'être utilisé comme une commande d'analyse simple et minimaliste. Pour les tâches simples qui ne valent pas vraiment la peine d'écrire une expression AWK ou Perl, tac pourrait bien être une solution sensée.

Le tac La commande est limitée, évidemment, car elle ne manipule en aucun cas les enregistrements, à part les inverser. Mais parfois, c'est la seule manipulation de liste dont vous avez besoin.

Par exemple, si vous emballez un logiciel pour le distribuer, il n'est pas rare d'avoir une liste des dépendances nécessaires à l'installation. Selon la façon dont vous avez rassemblé cette liste, vous pouvez l'avoir dans l'ordre dans lequel vous avez établi les dépendances requises au lieu de l'ordre dans lequel elles doivent être installées.

Cette pratique est relativement courante car les erreurs du compilateur touchent d'abord les dépendances de haut niveau. Autrement dit, s'il manque à votre système libavcodec alors GCC s'arrête et vous alerte ; mais puisque GCC n'a pas eu la chance de sonder votre système pour libvorbis et libvpx , par exemple, il ne peut pas vous dire que ces dépendances sont également manquantes (et, souvent, qu'elles doivent exister sur votre système avant de compiler libavcodec ).

Ainsi, votre liste de dépendances s'allonge de haut en bas au fur et à mesure que vous découvrez les bibliothèques dont votre système a besoin pour créer les bibliothèques dont les bibliothèques ont besoin (et ainsi de suite). À la fin d'un tel processus, tac est le moyen rapide et facile d'inverser cette liste.

Les fichiers journaux sont un autre désagrément courant. Les entrées sont généralement ajoutées à un fichier journal, donc les administrateurs utilisent tail pour voir les dernières erreurs. Cela fonctionne bien, mais il y a des moments où vous voulez voir un "morceau" d'entrées sans savoir jusqu'où vous devez remonter. Le tac commande redirigée vers moins ou plus place les dernières entrées en haut de votre écran.

Enfin, de nombreux fichiers de configuration n'ont pas de marqueur de fin clair pour une section donnée. Vous pouvez rechercher awk et sed commandes pour concevoir un moyen de déterminer quand un bloc dans un fichier de configuration se termine, ou vous pouvez utiliser tac pour inverser l'ordre de sorte qu'une fois que votre analyseur a trouvé la première entrée pertinente dans ce bloc, il sait également quand s'arrêter lecture, car ce qui était l'en-tête est maintenant un pied de page.

Tac on

Il existe de nombreuses autres utilisations intéressantes de tac , et probablement un tas de raisons pour lesquelles tac est trop rudimentaire pour être une solution. Cependant, votre système l'a probablement installé, alors souvenez-vous de cette commande la prochaine fois que vous trouverez ce cas limite dans votre flux de travail qui doit vraiment être atténuétac à l'envers.


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Vérifiez l'état du fichier sous Linux avec la commande stat

  3. Premiers pas avec la commande Linux cat

  4. Démarrer avec ls

  5. Premiers pas avec PostgreSQL sous Linux

Premiers pas avec le système d'exploitation Linux

Commande Linux WC avec exemples

Premiers pas avec la commande Tar

Utilisation de la commande Linux mv avec des exemples

Sécurisez Linux avec le fichier Sudoers

Commande de montage Linux avec exemples