GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich dem Anfang jeder Zeile in einer Datei eine Zeichenfolge voranstellen?

ein einzeiliger awk-Befehl sollte auch ausreichen:

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

Die gesamte Schleife kann durch einen einzigen sed-Befehl ersetzt werden, der auf die gesamte Datei wirkt:

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

Bezüglich Ihres ursprünglichen Fehlers:

./appendToFile.sh:Zeile 11:/bin/sed:Argumentliste zu lang

Das Problem liegt in dieser Codezeile:

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

$line in diesem Zusammenhang ist Dateiname das sed läuft dagegen. Um Ihren Code zu korrigieren, sollten Sie diese Zeile wie folgt korrigieren:

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

(Beachten Sie auch, dass Ihr ursprünglicher Code nicht die < $file enthalten sollte am Ende.)

William Pursell spricht dieses Problem in seinen beiden Vorschlägen korrekt an.

Ich glaube jedoch, dass Sie richtig festgestellt haben, dass es ein Problem mit Ihrer ursprünglichen Textdatei gibt. dos2unix wird dieses Problem nicht beheben, da es nur die Wagenrücklauf-Windows-Sticks am Zeilenende entfernt. (Wenn Sie jedoch versuchen, eine Linux-Datei in Windows zu lesen, erhalten Sie eine Mammutzeile ohne Rückgabewerte.)

Unter der Annahme, dass es kein Problem mit den Zeilenendezeichen in Ihrer Textdatei gibt, funktionieren die Antworten von William Pursell, Andy Lester oder nullrevolution.

Eine Variation der while read... Vorschlag:

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

Dies könnte direkt von der Shell ausgeführt werden (keine Notwendigkeit für eine Batch-/Skriptdatei):

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

Ein Perl-Weg wäre:

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

oder

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

In beiden Fällen lautet das ab filename und druckt die vorangestellten Zeilen nach STDOUT.

Wenn Sie einen -i hinzufügen Flag, dann ändert Perl die Datei an Ort und Stelle. Sie können auch mehrere Dateinamen angeben, und Perl erledigt sie wie von Zauberhand alle.


Linux
  1. So extrahieren Sie die tar.gz-Datei in Linux mithilfe der Befehlszeile

  2. So fügen Sie Text am Anfang jeder Zeile in Vim ein

  3. Wie fügt man Text vor der ersten Zeile einer Datei ein?

  4. Zum Anfang oder Ende der Datei in Vim gehen [Schneller Tipp]

  5. Wie kann ich grep die Zeilen unter und über jeder übereinstimmenden Zeile drucken lassen?

So fügen Sie Text am Anfang einer Datei in Linux hinzu

Wie füge ich in Bash nach jeder Zeile in einer Datei eine Zeichenfolge hinzu?

Wie kann ich in einer Linux-Shell jede Zeile einer mehrzeiligen Zeichenfolge verarbeiten?

Wie kann ich in jedem Ordner eine Datei erstellen?

Wie füge ich einen Text am Anfang einer Datei ein?

Wie kann ich eine Datei mit Zeilennummern öffnen, die von der Befehlszeile in 'vi' angezeigt werden?