Comment utiliser les commandes Linux cat et tac

Contenu

Art d'une fenêtre de terminal sur un bureau Linux

Les cat et tac Les commandes affichent le contenu des fichiers texte, mais il y a plus qu'il n'y paraît. Plongez un peu plus loin et apprenez quelques astuces de ligne de commande Linux productives.

Ce sont deux petites commandes simples, qui sont souvent rejetés pour n'être que ça: trop simple pour être vraiment utile. Mais une fois que vous connaissez les différentes façons de les utiliser, Vous verrez qu'ils sont incroyablement capables de faire leur juste part du gros du travail lorsqu'il s'agit de travailler avec des fichiers..

Le commandement du chat

cat est utilisé pour parcourir le contenu des fichiers texteet joindre des parties de fichiers pour former un fichier plus volumineux.

Dans un moment, à l'ère de l'accès commuté modem: Les fichiers binaires étaient souvent divisés en plusieurs fichiers plus petits pour un téléchargement facile. Au lieu de télécharger un gros fichier, tiré chaque fichier plus petit. Si un seul fichier n'a pas été téléchargé correctement, je voudrais juste récupérer ce fichier.

Depuis lors, J'avais donc besoin d'un moyen de reconstituer la collection de fichiers plus petits en un seul fichier binaire fonctionnel. Cette procédure s'appelait la concaténation. Et c'est là que cat est entré et d'où tire-t-il son nom.

Les connexions haut débit et fibre ont fait disparaître ce besoin particulier, tout comme les cris des appels téléphoniques, donc, Que reste-t-il pour cat faire aujourd'hui? Beaucoup en fait.

Affichage d'un fichier texte

Pour avoir cat lister le contenu d'un fichier texte dans une fenêtre de terminal, utilisez la commande suivante.

Assurez-vous que le fichier est un fichier texte. Si vous essayez de lister le contenu d'un fichier binaire dans la fenêtre du terminal, les résultats seront imprévisibles. Vous pouvez vous retrouver avec une session de terminal verrouillée ou pire.

poème de chat1.txt

Le contenu du fichier poem1.txt s'affiche dans la fenêtre du terminal.

C'est seulement la moitié du célèbre poème. Où est le reste? Voici un autre fichier appelé poem2.txt. Nous pouvons faire cat lister le contenu de plusieurs fichiers avec une seule commande. Tout ce que nous ferons est de lister les fichiers dans l'ordre sur la ligne de commande.

chat poème1.txt poème2.txt

ça a l'air mieux; maintenant nous avons le poème complet.

Utiliser le chat avec moins

Le poème est tout là, Mais il a passé la fenêtre trop vite pour lire les premiers vers. Nous pouvons canaliser la sortie de cat Dans less et faites défiler le texte à votre rythme.

chat poème1.txt poème2.txt | moins

Maintenant, nous pouvons aller et venir dans le texte dans une séquence, même si c'est dans deux fichiers texte séparés.

Numérotation des lignes dans un fichier

Nous pouvons demander à cat de numéroter les lignes du fichier tel qu'il est affiché. Pour faire ceci, nous utilisons le -n option (le numéro).

chat -n poème1.txt

Les lignes sont numérotées telles qu'elles sont affichées dans la fenêtre du terminal.

Ne pas numéroter les lignes vides

Nous avons réussi à avoir les lignes numérotées par cat, mais aussi les lignes blanches entre les versets sont comptées. Pour avoir les lignes de texte numérotées mais pour ignorer les lignes vides, utiliser el -b Option (numéro non vide).

chat -b poème1.txt

Maintenant, les lignes de texte sont numérotées et les lignes vides sont ignorées.

Ne pas afficher plusieurs lignes vides

S'il y a des sections de lignes vierges consécutives dans un fichier, Nous pouvons demander cat ignorer toutes les lignes blanches sauf une. regarde ce fichier.

La commande suivante provoquera cat pour n'afficher qu'une seule ligne vierge de chaque groupe de lignes vierges. L'option dont nous avons besoin pour y parvenir est la -s (espace vide).

chat -s poème1.txt

Cela n'affecte en rien le contenu du fichier; juste changer la forme cat montrer le fichier.

Onglets d'affichage

Si vous voulez savoir si les blancs sont causés par des espaces ou des tabulations, vous pouvez le découvrir en utilisant le -T option (afficher les onglets).

chat -T poème1.txt

Les onglets sont représentés par les caractères "^ I".

Affichage des fins de lignes

Vous pouvez vérifier les blancs à la fin en utilisant le -E Option (fin du spectacle).

chat -E poème1.txt

Les extrémités des lignes sont représentées par le caractère “$”.

Concaténer des fichiers

Cela n'a aucun sens d'avoir un poème enregistré dans deux fichiers, avec la moitié dans chacun. Joignons-les et créons un nouveau fichier avec le poème complet.

chat poème1.txt poème2.txt > jabberwocky.txt

utilisons cat pour consulter notre nouveau fichier:

chat jabberwocky.txt

Notre nouveau fichier contient le contenu des deux autres fichiers.

Ajouter du texte à un fichier existant

Ça c'est mieux, mais en réalité, ce n'est pas le poème complet. Le dernier vers est manquant. Le dernier couplet de Jabberwocky est le même que le premier couplet.

Si nous avons le premier verset dans un fichier, nous pouvons l'ajouter à la fin du fichier jabberwocky.txt et nous aurons le poème complet.

Dans cette prochaine commande, Nous devons utiliser >>, Pas seulement >. Si on n'en utilise qu'un > bien Écraser jabberwocky.txt. Nous ne voulons pas faire ça. Nous voulons annexer texte à la fin.

chat first_verse.txt >> jabberwocky.txt

Passons en revue le contenu du fichier jabberwocky.txt:

chat jabberwocky.txt

Et pour finir, toutes les parties du poème sont ensemble.

Redirigir stdin

Vous pouvez rediriger l'entrée du clavier vers un fichier en utilisant cat. Tout ce que vous tapez est redirigé vers le fichier jusqu'à ce que vous appuyiez sur Ctrl + ré. Veuillez noter que nous n'utilisons qu'un seul > parce que nous voulons créer le fichier (ou l'écraser, s'il existe).

chat > mon_poème.txt

Nous pouvons commencer à taper dès que nous émettons la commande. Nous appuyons sur Ctrl + D quand on a fini. Plus tard, nous pouvons vérifier le contenu du nouveau fichier avec:

chat mon-poème.txt

Ce bruit comme une turbine lointaine est probablement Lewis Carroll tournant dans sa tombe à grande vitesse.

La commande tac

tac est similaire à cat, mais il liste le contenu des fichiers dans le sens inverse.

Voyons ça:

tac mon_poème.txt

Et le fichier s'affiche dans la fenêtre du terminal dans l'ordre inverse. Dans cette circonstance, n'a aucun effet sur vos mérites littéraires.

Utiliser tac avec stdin

À l'aide de tac sans nom de fichier le fera fonctionner sur la saisie au clavier. Appuyer sur Ctrl + D arrêtera l'étage d'entrée, et tac listera dans l'ordre inverse ce que vous avez tapé.

tac

Lorsque Ctrl est enfoncé + ré, l'entrée est inversée et affichée dans la fenêtre du terminal.

Utilisation de tac avec des fichiers journaux

Mis à part les gadgets de salon de mauvaise qualité, il peut tac faire quelque chose d'utile? Oui il peut. De nombreux fichiers journaux ajoutent leurs entrées les plus récentes à la fin du fichier. À l'aide de tac (et, contre-intuitivement, head) nous pouvons afficher la dernière entrée dans la fenêtre du terminal.

Nous utilisons tac pour lister le fichier syslog à l'envers et le rediriger vers head. compte head pour n'imprimer que la première ligne qu'il reçoit (que grâce à tac est la dernière ligne du fichier), nous voyons la dernière entrée dans le fichier syslog.

tac/var/log/syslog | diriger -1

head imprime la dernière entrée dans le fichier syslog puis quitte.

Notez que head il n'imprime qu'une ligne, comme nous le demandons, mais la ligne est si longue qu'elle s'enroule deux fois. C'est pourquoi ils ressemblent à trois lignes de sortie dans la fenêtre du terminal.

Utiliser tac avec des enregistrements de texte

Le dernier truc tac il a dans sa manche est une beauté.

Généralement, tac opérer sur des fichiers texte en les parcourant ligne par ligne, de bas en haut. Une ligne est une séquence de caractères terminée par un caractère de nouvelle ligne. Mais on peut dire tac travailler avec d'autres délimiteurs. Cela nous permet de traiter “Fragments” des données contenues dans le fichier texte en tant qu’enregistrements de données.

Disons que nous avons un fichier journal d'un programme que nous devons revoir ou analyser.. Regardons son format avec less.

moins logfile.dat

Comme nous pouvons le voir, il existe un format répétitif pour le fichier. Il existe des séquences de trois lignes de hexadécimal valeurs. Chaque ensemble de trois lignes hexagonales a un slogan qui commence par "= SEQ", suivi d'une suite de chiffres.

Si on fait défiler jusqu'à la fin du fichier, nous pouvons voir qu'il y a beaucoup de ces enregistrements. Le dernier a le numéro 865.

Supposons, pour quelque raison que ce soit, nous devons travailler avec ce fichier dans l'ordre inverse, journal de données par journal de données. L'ordre des trois lignes hexadécimales de chaque enregistrement de données doit être conservé.

On notera que les trois dernières lignes du fichier commencent par les valeurs hexadécimales 93, E7 et B8, dans cet ordre.

Utilisons tac pour inverser le fichier. c'est un très long fichier, nous allons donc le canaliser vers less.

tac logfile.dat | moins

Cela renverse le fichier, mais ce n'est pas le résultat que nous voulons. Nous voulons que le fichier soit inversé, mais les lignes de chaque enregistrement de données doivent être dans leur ordre d'origine.

Nous avons précédemment enregistré que les trois dernières lignes du fichier commencent par les valeurs hexadécimales 93, E7 et B8, dans cet ordre. L'ordre de ces lignes a été inversé. En même temps, les lignes “= SEQ” maintenant ils sont au dessous de chaque ensemble de trois lignes hexagonales.

tac au secours.

tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | moins

Analysons ça.

Les -s L'option (séparateur) informe tac ce que nous voulons utiliser comme délimiteur entre nos enregistrements. Dé tac n'utilisez pas votre caractère de nouvelle ligne fréquent, mais utilisez plutôt notre séparateur.

Les -r (expression régulière) option dit tac traiter la chaîne de séparation comme un expression régulière.

Les -b (avant) l'option provoque tac pour lister le séparateur avant de chaque enregistrement au lieu d'après (qui est la position fréquente de votre séparateur par défaut, le caractère de nouvelle ligne).

Les -s (séparateur) chaîne ^=SEQ.+[0-9]+*$ est décrypté comme suit:

Les ^ le caractère représente le début de la ligne. Ceci est suivi =SEQ.+[0-9]+*$. Cela indique tac pour rechercher chaque occurrence de “= SEQ”. au début d'une ligne, suivi de n'importe quelle séquence de chiffres (indiqué par [0-9]), et suivi de tout autre jeu de caractères (indiqué par *$).

Nous canalisons tout dans less, comme toujours.

fichier journal inversé avec des enregistrements de données correctement formés

Notre fichier est maintenant présenté dans l’ordre inverse avec chaque slogan “= SEQ” Énumérés avant de vos trois lignes de données hexadécimales. Les trois lignes de valeurs hexadécimales sont dans leur original ordre au sein de chaque enregistrement de données.

Nous pouvons vérifier cela simplement. La première valeur des trois premières lignes d'hex (qui étaient les trois dernières lignes avant que le fichier ne soit inversé) correspond aux valeurs à partir desquelles nous avons pris un enregistrement précédent: 93, E7 et B8, dans cet ordre.

C'est tout un hack pour une fenêtre de terminal à une seule ligne.

Tout a un but

Dans le monde de Linux, Même les commandes et utilitaires apparemment simples peuvent avoir des propriétés surprenantes et puissantes..

La philosophie de conception des utilitaires simples ils font bien une chose, et qui interagissent facilement avec d'autres utilitaires, a conduit à d'étranges petites commandes, Quoi tac. À première vue, semble un peu étrange. Mais quand tu regardes sous la surface, il y a un pouvoir inattendu que vous pouvez exploiter à votre avantage.

O, comme dit une autre philosophie, “Ne méprisez pas le serpent pour ne pas avoir de cornes, car qui peut dire qu'il ne se transformera pas en dragon?”

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.