En Bash, comment puis-je ajouter une chaîne à la fin de chaque ligne dans un fichier?
Comment puis-je ajouter une chaîne à la fin de chaque ligne dans un fichier à l'aide de bash? Peut-il être fait à l'aide de la commande sed, si oui, comment?
Vous devez vous connecter pour publier un commentaire.
Si votre
sed
permet en place d'édition via le-i
paramètre:Si non, vous devez faire un fichier temporaire:
touch
le fichier temporaire? Et je voudrais faire lesed
commande conditionnelle à la réussite de lacp
ou l'origine pourrait être perdu.sed 's/^/string after each line/'
fait ce que j'avais prévu (la positionne en tête de chaque ligne), maissed 's/^/string after each line/'
ne pas (il remplace l'ensemble de la ligne avec mon ajouter une chaîne). Ce qui donne? Toutes les idées @TomDeGisi ?sed 's/^/string before each line/'
fonctionne, mais que ajoutant avecsed 's/$/string after each line/'
ne l'était pas. Possible dos2unix problème?Je préfère utiliser
awk
.Si il y a une seule colonne, utilisez
$0
, sinon le remplacer par la dernière colonne.Une façon,
ou cette,
NR
variable:awk '{print $0, NR}'
g
et partout en ligne.Si vous l'avez, le lam (stratifié) utilitaire peut le faire, par exemple:
Pur le shell POSIX et
éponge
:xargs
etprintf
:À l'aide de
join
:Shell outils à l'aide de
paste
,yes
,head
&
wc
:Noter que
paste
insère un Onglet char avant$suffix
.Bien sûr
sponge
peut être remplacé par un fichier temporaire, par la suitemv
'd sur le nom original du fichier, comme avec certains autres réponses...sed
, si les ressources sont très limitées.Sed est un peu moche, vous pourriez le faire avec élégance, comme si:
cat foo
; do echo ${i}bar; fait foobar barbar bazbar mais après quelques essais, j'ai peut-être tort à propos de mon raisonnement, mais Dennis est à droiteecho "foo bar" | (for i in `cat`; do echo ${i}bar; done)
qui imprime 2 lignes, même si l'entrée est de 1 lignefoo bar
(etcat
de lecture sur l'entrée standard au lieu d'un fichier ne fait aucune différence pour cela).