## jeder Zeile in einer Textdatei voranstellen


30

Ich möchte allen Zeilen in einer normalen Textdatei Hashes hinzufügen. Ich kann sowohl das Terminal als auch die grafische Benutzeroberfläche problemlos verwenden - ich muss es nur erledigen.

Antworten:


50

Sie können seddazu Folgendes verwenden:

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

Dies ersetzt den Zeilenanfang ( ^) durch ##.

Bearbeitet mit dem -i.bakSchalter seddie Datei direkt, erstellt jedoch eine Sicherungskopie mit der Erweiterung .bak.


1
+1 Dies ist das erste Mal, dass ich auf diese Sicherungsmethode stoße. Ich habe immer ein Inline direkt ersetzen: sed 's/^/##/' -i file. In diesem Fall wäre dies vorzuziehen, da es nicht schief gehen kann. In anderen Fällen kann dieser Befehl mit kombiniert werden diff -u file.bak file, um die Unterschiede zu sehen (ggf. weiterleiten less). Wenn bestätigt wird, dass es funktioniert, kann das Backup entfernt werden. Sonst könnte es mit einem einfachen restauriert werden mv file.bak file.
Lekensteyn

1
Elegant. Ich habe über so etwas nachgedacht sed 's/^\(.*\)$/##\1/', aber das ist viel schöner.
Ordnen Sie den

Nizza .. Ich dachte darüber nach, Vim vorzuschlagen, dies zu tun ...
Sathish

Dies hat mir geholfen, eine Blocklistendatei zu konvertieren :) Vielen Dank 1+
Neil



4

Hier ist ein bashWeg:

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

( In der bashShellread -r funktioniert die Ausführung ohne andere Argumente wie folgt IFS= read -r REPLY.)

Dies ist stilistisch inspiriert von der Perl-Lösung von beav_35, die , wie ich zugeben muss, bei großen Dateien viel schneller ausgeführt wird, da perlzu erwarten ist, dass sie bei der Textverarbeitung effizienter ist als eine Shell.


3

sed -iist kein POSIX-Standard. Wenn Sie also Purist sind, sollten Sie Folgendes verwenden ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

Hier ist ein einfacher perlWeg als anderswo vorgestellt:

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

Dies (ab) verwendet die Tatsache, dass perl -pdie Zeile nach Ausführung des in angegebenen Befehls gedruckt wird -e.


0

Sie können Vim im Ex-Modus verwenden:

ex -sc '%s/^/##/|x' file
  1. % Wählen Sie alle Zeilen aus

  2. s Ersatz

  3. x speichern und schließen


0

Kann mit der Mapping-Funktion von Python und der Umleitung von stdin durchgeführt werden:

$ 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

Speichern Sie die Ausgabe in einer neuen Datei und verwenden Sie sie anstelle der Originaldatei

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.