Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

Lire du texte dans un fichier
(cat, antiword, catdoc, more, less, head, tail
et même sed)

Up: Rechercher des fichiers ou des fragments de texte dans des fichiers ou les lire Previous: Rechercher du texte ou une expression régulière dans une ligne (grep)

La commande cat concatène des fichiers, par défaut vers la sortie standard. Par conséquent, appliquer cat à un seul fichier texte est la manière simple de lire ce texte dans le terminal.

Si ce n’est pas un fichier texte, il y a cependant des solutions. Antiword lit en texte dans le terminal les anciens fichiers Word de Microsoft : antiword filename.doc. La commande catdoc fait de même, mais elle lit aussi les fichiers RTF : catdoc filename.rtf. (On peut enchaîner ça avec les commandes more, less, head, tail comme expliqué ci-dessous pour cat.)

Si le texte est un peu long, on peut ne pas vouloir tout lire, ou pas tout d’un coup. Pour couper en pages la sortie de cat, on chaîner avec less : cat filename | less. La barre d’espacement amène la page suivante. (La commande less fait la même chose que more et même beaucoup plus, avec des tas d’options que je n’ai pas encore étudiées.)

Pour lire seulement certaines lignes, head lit les dix premières lignes du fichier. (Pour tout dire, on peut aussi comme avec cat, désigner plus d’un fichier et obtenir ainsi les dix premières lignes de chacun.) Avec head -50 filename, on a les cinquante premières lignes. La commande tail fait la même chose à l’envers, en partant de la fin, donc les dix dernières lignes du fichier ou, avec tail -50 filename, les cinquante dernières lignes. (Tant dans head -50 que dans tail -50, le trait d’union marque que 50 est un paramètre ; ce n’est pas (comme on pourrait le penser surtout avec tail) écrire « moins cinquante », bien que ça veuille dire (avec tail, mais pas avec head) « moins cinquante ».)

Pour atteindre une série de lignes autres que le début ou la fin du fichier, on peut combiner les deux : head -50 filename | tail -10 donnera les dix dernières de ces cinquante lignes, c’est-à-dire les lignes de 41 à 50.

Des gens plus savants que moi font remarquer que l’ordinateur doit lire les cinquante premières lignes pour n’en afficher que les dix dernières. Loin dans un gros fichier, ce pourrait être lent. On obtient la même chose directement avec sed -ne '41,50p' filename. La source en TEI XML du présent travail fait plus de 13 000 lignes. Le fichier TEI de mes notes de lecture sur le marxisme fait plus de 60 000 lignes. Si quand je contrôle avec jing si je respecte le schéma Relax NG de la TEI, j’apprends qu’il y a une erreur à la ligne 43567, je peux examiner l’erreur en prenant dix lignes avant et après (pour repérer où je suis dans mon travail) par sed -ne '43558,43577p' lectures.xml

Up: Rechercher des fichiers ou des fragments de texte dans des fichiers ou les lire Previous: Rechercher du texte ou une expression régulière dans une ligne (grep)