Je suis en train de faire certaines opérations de traitement de texte et enfin en mesure d'obtenir un fichier de ce type
india
sudan
japan
france
maintenant je veux ajouter un commentaire dans le fichier ci-dessus, comme dans le fichier final, il devrait être quelque chose comme
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
comme un même commentaire sur tout le fichier. Comment puis-je faire cela?
Il y a plusieurs façons:
sed
: remplacer $
(fin de ligne) avec le texte donné.
$ sed 's/$/ | COUNTRY/' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
awk
: affiche la ligne plus le texte donné.
$ awk '{print $0, "| COUNTRY"}' file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Enfin, dans pure bash
: lisez ligne par ligne et imprimez-la avec le texte donné. Notez que ceci est déconseillé comme expliqué dans Pourquoi utiliser une boucle Shell pour traiter du texte est-il considéré comme une mauvaise pratique?
$ while IFS= read -r line; do echo "$line | COUNTRY"; done < file
india | COUNTRY
sudan | COUNTRY
japan | COUNTRY
france | COUNTRY
Pour une approche plus obscure:
yes '| COUNTRY' | sed $(wc -l < file)q | paste -d ' ' file -
Vous pouvez également utiliser xargs
avec echo
pour cela:
< file xargs -d "\n" -rI % echo '% | COUNTRY'
Ceci fera que xargs
prendra chaque ligne de file
et la transmettra une à la fois † à la commande spécifiée echo
en remplaçant le %
(ou le caractère de votre choix) avec la ligne de saisie.
† Par défaut, xargs
transmettra plusieurs lignes d'entrée à une seule commande, en les ajoutant toutes à sa liste d'arguments. Mais en spécifiant -I %
fait que xargs
place l'entrée à l'emplacement spécifié dans la commande et n'y met qu'une ligne à la fois, exécutant echo
autant de fois que nécessaire.
Un autre awk
awk '$0=$0" | COUNTRY"' file