La réponse ci-dessous, avec la ligne de commande nl, est une solution beaucoup plus simple.
Daniel Ribeiro
2
@DanielRibeiro plus simple mais moins fiable et moins flexible.
Jonathan Hartley
@DanielRibeiro La réponse à l'aide nlest également FAUX. Dans le code source, il ne vous donnera jamais les bons numéros de ligne, car il ne compte pas les lignes contenant uniquement des espaces.
oligofren
@jtbandes Votre solution ajoute des espaces entre le numéro de ligne et la tabulation (au moins sur mon mac)
Yossi Vainshtein
55
La commande nl devrait le faire, mais elle ajoute également un espace avant le numéro de ligne. Cela fait partie de Linux coreutils.
En fait, vous pouvez dire nld’omettre l’espace avant le nombre. Utilisez simplement cette -w1option pour lui indiquer que la largeur minimale d’un nombre est 1.
cjm
2
Attention, 'nl' suppose par défaut que votre texte est divisé en 'pages' avec en-têtes et pieds de page, tous délimités par des lignes telles que '\:' ou '\: \:' ou '\: \: \:'. Si votre texte contient des lignes telles que celle-ci, alors 'nl' produira des résultats inattendus, tels qu'avaler ces lignes, les sections sans numérotation ou redémarrer la numérotation à partir de 1 dans une section. Utilisez -dXY (où XY est une paire de caractères qui ne figurent pas seuls sur une ligne dans votre texte) pour éviter ce problème. Dans le cas général, cela peut être difficile à prévoir, je vous recommande donc d'utiliser l'une des solutions proposées sur cette page.
Jonathan Hartley
L'utilisation de «-w1» ne supprime pas simplement l'espace après les chiffres, mais tronque également les numéros de ligne pour ne comporter qu'un seul caractère, ce qui signifie que vos numéros de ligne affichent uniquement leur chiffre le moins significatif. Ce n'est certainement pas ce que vous voulez.
Jonathan Hartley
4
Avec, -nlnvous pouvez justifier à gauche si vous ne voulez pas d'espace avant les numéros de ligne. En outre, pour spécifier un séparateur de tabulation, vous pouvez utiliser -s$'\t'ou -s' '(insérer une tabulation entre guillemets simples avec ctrl+vthen tab).
don_crissti
2
@ JonathanHartley nl -w1(d'après GNU coreutils 8.24) ne tronque pas les numéros de ligne.
Skippy le Grand Gourou
10
sed = test.txt | sed 'N;s/\n/\t/'
La commande "sed =" affichera le numéro de ligne suivi d'un retour à la ligne puis de la ligne suivante.
L'expression "N; s / \ n / \ t /" prendra chaque ligne, obtiendra la ligne suivante (c'est-à-dire le numéro de ligne et la ligne) et remplacera le retour chariot par une tabulation.
Imprime un "t" sans onglet avec ma version de sed: 8t j'ai vu les meilleurs esprits de ma génération être détruits par la folie 9t, affamés hystériques nus,
Richard Hoskins
1
Notez qu’il \ns’agit d’un saut de ligne (communément appelé simplement "nouvelle ligne", car sa première utilisation répandue a été sous Unix) et \rcorrespond à un retour chariot. Windows utilise \r\n(également appelé CRLF).
Camilo Martin
(Yay nitpicking!)
Camilo Martin
Si nous allons nous lancer dans des querelles quant à la possibilité que les fenêtres soient différentes, nous devrons peut-être envisager l'UTF16.
Réponses:
la source
awk '{print NR, "\t", $0}'
.nl
est également FAUX. Dans le code source, il ne vous donnera jamais les bons numéros de ligne, car il ne compte pas les lignes contenant uniquement des espaces.La commande nl devrait le faire, mais elle ajoute également un espace avant le numéro de ligne. Cela fait partie de Linux coreutils.
la source
nl
d’omettre l’espace avant le nombre. Utilisez simplement cette-w1
option pour lui indiquer que la largeur minimale d’un nombre est 1.-nln
vous pouvez justifier à gauche si vous ne voulez pas d'espace avant les numéros de ligne. En outre, pour spécifier un séparateur de tabulation, vous pouvez utiliser-s$'\t'
ou-s' '
(insérer une tabulation entre guillemets simples avecctrl+v
thentab
).nl -w1
(d'après GNU coreutils 8.24) ne tronque pas les numéros de ligne.La commande "sed =" affichera le numéro de ligne suivi d'un retour à la ligne puis de la ligne suivante.
L'expression "N; s / \ n / \ t /" prendra chaque ligne, obtiendra la ligne suivante (c'est-à-dire le numéro de ligne et la ligne) et remplacera le retour chariot par une tabulation.
la source
\n
s’agit d’un saut de ligne (communément appelé simplement "nouvelle ligne", car sa première utilisation répandue a été sous Unix) et\r
correspond à un retour chariot. Windows utilise\r\n
(également appeléCRLF
).cat -n ajoute linumbers en tant que "123 linecontents" et que l'expression rationnelle le modifie en "linumberTABlinecontents"
la source
ou
la source
Que diriez-vous
?
la source
OK, voici une solution bash sur une ligne:
Le premier paramètre IFS indique à bash de lire une ligne complète à la fois. La deuxième ligne réinitialise l'IFS par défaut.
En prime, il fonctionne complètement dans votre shell et n'exécute pas de programme!
la source
Ok, puisque nous recueillons des moyens de le faire,
la source
ou pour certains non-GNU
sed
:la source