Dans le didacticiel d'aujourd'hui sur la gestion de fichiers Linux, nous examinerons des approches valides pour joindre plusieurs lignes dans un fichier en une seule ligne. À la fin de cet article, vous aurez ajouté quelques jalons informatiques à votre expérience de gestion de fichiers Linux.
[ Vous pourriez également aimer :Comment joindre deux fichiers texte sous Linux ]
Les possibilités/opportunités pour les utilisateurs exploitant le système d'exploitation Linux via l'interface de ligne de commande continuent d'être infinies. L'une de ces possibilités consiste à transformer un fichier multiligne en un fichier monoligne via une série de commandes Linux. L'objectif de la fusion de telles lignes peut être aussi simple que la nécessité d'ajouter des délimiteurs personnalisés au fichier ciblé.
Énoncé du problème
Étant donné que ce didacticiel se concentrera sur la fusion de plusieurs lignes en une seule ligne sur un fichier ciblé, nous devons créer ce type de fichier à des fins de référence et le remplir avec des données multilignes.
$ sudo nano sample_file.txt
Selon la capture d'écran ci-dessus, nous avons affaire à un fichier (sample_file.txt ) avec six lignes, et il existe trois approches pour joindre ces six lignes :
- Sans délimiteurs :J'aime sincèrement les tutoriels LinuxShellTips !
- Avec un seul caractère délimiteur :I Genuinely,Love,Linux.Shell,Tips,Tutorials !
- Avec plusieurs séparateurs de caractères :I Genuinely;Love;Linux;Shell;Tips;Tutorials !
Comment joindre plusieurs lignes en une seule ligne dans un fichier
Jetons un coup d'œil à ces trois approches pour joindre plusieurs lignes dans un fichier en une seule ligne sous Linux.
1. Utilisation de la commande sed
La puissance du sed L'utilitaire de ligne de commande de traitement de texte nous permettra de joindre les six lignes de notre exemple de fichier texte en abordant les trois approches décrites ci-dessus en référence à presque la même syntaxe de code.
Sans délimiteurs :
$ sed ':a; N; $!ba; s/\n//g' sample_file.txt
Avec espacement :
$ sed ':a; N; $!ba; s/\n/ /g' sample_file.txt
Avec un délimiteur de caractère unique, par ex. une virgule :
$ sed ':a; N; $!ba; s/\n/,/g' sample_file.txt
Avec délimiteur de caractères multiples, par ex. point-virgule et espace blanc :
$ sed ':a; N; $!ba; s/\n/; /g' sample_file.txt
2. Utilisation de la commande awk
Le awk de Linux command est un autre outil de ligne de commande de traitement de texte réputé. Son approche pour résoudre notre problème multi-lignes au problème mono-ligne peut être analysée et mise en œuvre de la manière suivante :
Sans délimiteurs :
$ awk -v d="" '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Avec espacement :
$ awk -v d=" " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Avec un délimiteur de caractère unique, par ex. une virgule :
$ awk -v d="," '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
Avec délimiteur de caractères multiples, par ex. point-virgule et espace blanc :
$ awk -v d="; " '{s=(NR==1?s:s d)$0}END{print s}' sample_file.txt
3. Utilisation de la commande Coller
La coller La commande n'est idéale que pour joindre plusieurs lignes sans délimiteurs, avec espacement et avec un délimiteur de caractère unique. Cet utilitaire réside sous GNU Coreutils package d'où sa disponibilité sur toutes les distributions de système d'exploitation Linux.
Sans délimiteurs :
$ paste -sd '' sample_file.txt
Avec espacement :
$ paste -sd ' ' sample_file.txt
Avec un délimiteur de caractère unique, par ex. un trait de soulignement :
$ paste -sd '_' sample_file.txt
Le trait de soulignement final (_)
peut être supprimé en redirigeant la commande paste vers une commande sed :
$ paste -sd '_' sample_file.txt | sed 's/_$/\n/'
Cette approche n'est pas idéale avec plusieurs délimiteurs de caractères, par exemple un point-virgule et un espace blanc en raison de sorties irrégulières comme celles-ci :
$ paste -sd '; ' sample_file.txt
4. Utilisation de la commande tr
La commande tr est également idéal pour joindre plusieurs lignes sans délimiteurs, avec espacement et avec un seul caractère délimiteur.
Sans délimiteurs :
$ tr -d '\n' < sample_file.txt
Avec espacement :
$ tr '\n' ' ' < sample_file.txt
Avec un délimiteur de caractère unique, par ex. une virgule :
$ tr '\n' ',' < sample_file.txt
Redirigez la sortie vers une commande sed pour vous débarrasser des virgules supplémentaires.
$ tr '\n' ',' < sample_file.txt | sed 's/,,$/\n/'
Nous avons appris avec succès comment joindre plusieurs lignes en une seule ligne dans un fichier sous Linux.