GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je ajouter une chaîne au début de chaque ligne dans un fichier ?

une commande awk d'une ligne devrait également faire l'affaire :

awk '{print "prefix" $0}' file

La boucle entière peut être remplacée par une seule commande sed qui agit sur l'ensemble du fichier :

sed -e 's/^/prefix/' $file

Concernant votre erreur d'origine :

./appendToFile.sh :ligne 11 :/bin/sed :liste d'arguments trop longue

Le problème vient de cette ligne de code :

sed -e 's/^/prefix/' $line

$line dans ce contexte est nom de fichier qui sed est en cours d'exécution contre. Pour corriger votre code, vous devez corriger cette ligne comme telle :

echo $line | sed -e 's/^/prefix/'

(Notez également que votre code d'origine ne doit pas contenir le < $file à la fin.)

William Pursell aborde correctement ce problème dans ses deux suggestions.

Cependant, je crois que vous avez correctement identifié qu'il y a un problème avec votre fichier texte d'origine. dos2unix ne corrigera pas ce problème, car il ne fait que supprimer les retours chariot de Windows à la fin des lignes. (Cependant, si vous essayez de lire un fichier Linux sous Windows, vous obtiendrez une ligne gigantesque sans retour.)

En supposant que ce n'est pas un problème avec les caractères de fin de ligne dans votre fichier texte, les réponses de William Pursell, Andy Lester ou nullrevolution fonctionneront.

Une variante du while read... proposition :

while read -r line; do  echo "PREFIX " $line; done < $file

Cela pourrait être exécuté directement à partir du shell (pas besoin d'un fichier batch / script):

while read -r line; do echo "kp" $line; done < stusers.txt

Une façon Perl de le faire serait :

perl -p -e's/^/prefix' filename

ou

perl -p -e'$_ = "prefix $_"' filename

Dans les deux cas, cela lit à partir de filename et imprime les lignes préfixées sur STDOUT.

Si vous ajoutez un -i flag, alors Perl modifiera le fichier en place. Vous pouvez également spécifier plusieurs noms de fichiers et Perl les fera tous comme par magie.


Linux
  1. Comment insérer du texte avant la première ligne d'un fichier ?

  2. Comment analyser chaque ligne d'un fichier texte comme argument d'une commande ?

  3. Aller au début ou à la fin du fichier dans Vim [Quick Tip]

  4. Comment puis-je faire en sorte que grep imprime les lignes en dessous et au-dessus de chaque ligne correspondante?

  5. Dans Bash, comment ajouter une chaîne après chaque ligne dans un fichier ?

Comment extraire le fichier tar.gz sous Linux à l'aide de la ligne de commande

Comment ajouter du texte au début du fichier sous Linux

Ajouter une chaîne de préfixe au début de chaque ligne

Comment puis-je ajouter un pied de page au bas de chaque page d'un fichier postscript ou pdf sous Linux?

Comment puis-je ajouter une chaîne au début de chaque fichier dans un dossier en bash ?

Comment ajouter une chaîne de date à chaque ligne d'un fichier journal écrit en continu