Ajoute ## à chaque ligne d'un fichier texte

27

Je souhaite ajouter des hachages à toutes les lignes d'un fichier texte normal. L’utilisation du terminal et de l’interface graphique me convient parfaitement. Je dois juste le faire.

    
posée Oxwivi 30.07.2011 - 08:32
la source

8 réponses

45

Vous pouvez utiliser sed pour le faire:

sed -i.bak 's/^/##/' file

Ceci remplace le début de la ligne ( ^ ) par ## .

Avec le commutateur -i.bak , sed modifie le fichier sur place, mais crée une copie de sauvegarde portant l'extension .bak .

    
réponse donnée Jukka Matilainen 30.07.2011 - 08:48
la source
8

Voici une solution à ce problème en utilisant perl

perl -e 'while (<>) {print "##$_"}' < infile > outfile
    
réponse donnée beav_35 31.07.2011 - 05:43
la source
6

Pendant que nous y sommes:

gawk -i inplace '{print "##"$0}' infile

Ceci utilise le (relativement nouveau) plug-in d'édition en place pour GNU awk 4.1.0 +.

    
réponse donnée muru 18.09.2014 - 01:49
la source
4

Voici un bash :

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( dans le shell bash , , en exécutant read -r avec aucun autre argument ne fonctionne comme IFS= read -r REPLY .)

Ceci est stylistiquement inspiré par la solution perl de beav_35 , qui, je l'avoue, s'exécute probablement beaucoup plus rapidement pour les gros fichiers, car perl pourrait être plus efficace qu'un shell en ce qui concerne le texte traitement.

    
réponse donnée Eliah Kagan 18.09.2014 - 01:42
la source
3

sed -i n'est pas standard POSIX, donc si vous êtes un puriste, vous voudrez utiliser ed :

printf ",s/^/##/\nw\nq" | ed -s file.txt
    
réponse donnée fkraiem 18.09.2014 - 01:45
la source
3

Voici un moyen perl plus facile que celui présenté ailleurs:

perl -pi -e 'print "##"' YOURFILEHERE

Ceci (ab) utilise le fait que perl -p imprime la ligne après avoir exécuté la commande donnée dans -e .

    
réponse donnée abligh 12.06.2015 - 19:35
la source
0

Vous pouvez utiliser Vim en mode Ex:

ex -sc '%s/^/##/|x' file
  1. % sélectionner toutes les lignes

  2. s substitute

  3. x enregistrer et fermer

réponse donnée Steven Penny 16.04.2016 - 20:38
la source
0

Peut être fait avec la fonction de mapping de python et la redirection de stdin:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

Enregistrez la sortie dans un nouveau fichier et utilisez-la à la place de l'original

    
réponse donnée Sergiy Kolodyazhnyy 25.12.2016 - 00:32
la source

Lire d'autres questions sur les étiquettes