J'ai un fichier texte ("INPUT.TXT") du format: que j'ai besoin de reformater à: p> Je pense que l'outil correct pour ce travail serait "TR". Je peux remplacer toutes les nouvelles lignes avec des colons avec la commande: p> Il y a 99% de mon travail effectué. J'ai un problème, maintenant, cependant. En remplaçant toutes les nouvelles lignes avec des colons, je ne reçois pas seulement un point de côlon étranger à la fin de la séquence, mais je perds également le retour du chariot à la fin de l'entrée. Il ressemble à ceci: p> maintenant, j'ai besoin de retirer le côlon de la fin de l'entrée. Toutefois, si j'essaie de transmettre cette entrée traitée via "SED" pour éliminer le dernier côlon (qui serait maintenant, je pense être une utilisation appropriée de "SED"), je me trouve avec un deuxième problème. L'entrée n'est plus terminée par une nouvelle ligne du tout! "SED" échoue, pour toutes les commandes, car il ne trouve jamais la fin de la première ligne d'entrée! p> Il semble que l'Ajout d'une nouvelle ligne à la fin de certaines contributions est une tâche très, très courante, et envisageant que je me faisais moi-même était profondément tenté d'écrire un programme pour le faire en C (qui prendrait environ huit lignes de code), je ne peux pas imaginer qu'il n'y a pas déjà un moyen très simple de le faire avec les outils déjà disponibles pour vous dans le noyau Linux. P> p>
3 Réponses :
Ceci devrait faire le travail ( en utilisant uniquement bash sans aucun extternal: p> à l'aide d'une boucle dans en utilisant awk: p> ou: p> edit: strong> p> Voici un autre moyen de PURE BASH: P> cat code> et
echo code> est inutile):
SED code >:: p>
sh code>: p>
echo "$(tr '\n' ':' < INPUT.TXT | head -c -1)"
J'étais au début déconcerté pourquoi vous posteriez comme une solution la chose exacte que j'ai dit ne fonctionnait pas, alors je l'ai essayé sur une autre machine. J'ai alors compris que le serveur Sun que j'avais besoin de la solution sur n'utilisait pas GNU 'SED'. La version de 'Sed' sur le serveur échoue lorsque l'entrée n'a aucune ligne de terminaison, par conséquent, comme indiqué, pourquoi j'ai utilisé "Echo". (((Le serveur est un dispositif essentiel de mission au travail qui n'a jamais échoué et n'a donc jamais été redémarré, encore moins mis à jour, les années. Bienvenue dans ma vie.) La solution de boucle de coquille est géniale, cependant.
/ bin / sed sur le soleil ... Ick. Que diriez-vous / usr / xpg4 / bin / sed?
Voici encore une autre solution: (suppose un ensemble de caractères où ':' est octal 72, par exemple ASCII)
perl -l72 -pe '$\="\n" if eof' INPUT.TXT
ancienne question, mais