Bisher konnte ich herausfinden, wie eine Zeile am Anfang einer Datei hinzugefügt werden kann, aber genau das möchte ich nicht. Ich werde es an einem Beispiel zeigen
Dateiinhalt
some text at the beginning
Ergebnis
<added text> some text at the beginning
Es ist ähnlich, aber ich möchte keine neue Linie damit erstellen ...
Ich würde dies gerne tun, sed
wenn möglich.
sed
.Antworten:
sed
kann an einer Adresse arbeiten:Was ist das Magische, das
1s
Sie bei jeder Antwort hier sehen? Leitungsadressierung! .Möchten Sie
<added text>
die ersten 10 Zeilen hinzufügen ?Oder Sie können verwenden
Command Grouping
:quelle
Wenn Sie eine Zeile am Anfang einer Datei hinzufügen möchten, müssen Sie
\n
am Ende der Zeichenfolge die beste Lösung oben hinzufügen .Die beste Lösung fügt die Zeichenfolge hinzu, aber mit der Zeichenfolge wird keine Zeile am Ende einer Datei hinzugefügt.
quelle
Wenn die Datei nur eine Zeile enthält, können Sie Folgendes verwenden:
Wenn es mehr als eine Zeile ist. einer von:
Ich habe letzteres eingefügt, damit Sie wissen, wie man Linienbereiche macht. Beide "ersetzen" die Startzeilenmarkierung in den betroffenen Zeilen durch den Text, den Sie einfügen möchten. Sie können auch (vorausgesetzt, Sie
sed
sind modern genug) Folgendes verwenden:In-Place-Bearbeitung durchführen.
quelle
Sie können verwenden
cat -
quelle
echo
Hinzufügen einer neuen Zeile zu verhindern ?> file
an den Befehl"some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
So fügen Sie nur eine neue Zeile ein:
quelle
Unterschale verwenden:
quelle
Beachten Sie, dass unter OS X ein
sed -i <pattern> file
Fehler auftritt. Wenn Sie jedoch eine Sicherungserweiterung bereitstellensed -i old <pattern> file
,file
wird diese beim Erstellen an Ort und Stelle geändertfile.old
. Sie können dannfile.old
in Ihrem Skript löschen .quelle
PROBLEM: Kennzeichnen Sie eine Datei oben in der Datei mit dem Basisnamen des übergeordneten Verzeichnisses.
Dh für
Markieren Sie die Oberseite
file1
mitProgramming
.LÖSUNG 1 - Nicht leere Dateien:
1s
Platziert den Text in Zeile 1 der Datei.LÖSUNG 2 - leere oder nicht leere Dateien:
Der
sed
obige Befehl schlägt bei leeren Dateien fehl. Hier ist eine Lösung, die auf /superuser/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841 basiertBeachten Sie, dass der
-
Befehl in cat erforderlich ist (liest die Standardeingabe: sieheman cat
für weitere Informationen). Hier, glaube ich, ist es notwendig, die Ausgabe der printf-Anweisung (nach STDIN) zu übernehmen und diese und die Datei auf temp zu setzen ... Siehe auch die Erklärung unten auf http://www.linfo.org/cat .html .Ich
-f
habe denmv
Befehl auch hinzugefügt , um zu vermeiden, dass beim Überschreiben von Dateien nach Bestätigungen gefragt wird.So verwenden Sie ein Verzeichnis:
Beachten Sie auch, dass dadurch Pfade mit Leerzeichen unterbrochen werden. An anderer Stelle gibt es Lösungen (z. B. Dateiglobbing oder
find . -type f ...
Lösungen vom Typ) für diese.ADDENDUM: Betreff: Mein letzter Kommentar: Mit diesem Skript können Sie Verzeichnisse mit Leerzeichen in den Pfaden durchsuchen:
quelle
Hallo mit Wagenrücklauf:
quelle
So fügen Sie eine Zeile am Anfang der Datei hinzu:
quelle
Es gibt einen sehr einfachen Weg:
quelle
Nur zum Spaß, hier ist eine Lösung,
ed
die nicht das Problem hat, nicht an einer leeren Datei zu arbeiten. Sie können es wie jede andere Antwort auf diese Frage in ein Shell-Skript einfügen.Das obige Skript fügt den einzufügenden Text in die erste Zeile ein und verbindet dann die erste und zweite Zeile. Um zu vermeiden, dass ed bei einem ungültigen Join bei einem Fehler beendet wird, wird zuerst eine leere Zeile am Ende der Datei erstellt und später entfernt, falls sie noch vorhanden ist.
Einschränkungen: Dieses Skript funktioniert nicht, wenn
<added text>
es genau einem einzelnen Punkt entspricht.quelle
meine zwei Cent:
Dies funktioniert auch dann, wenn die Zeichenfolge einen Schrägstrich enthält
"/"
quelle
Der erste
tac
leitet die Datei rückwärts weiter (letzte Zeile zuerst), sodass der "einzufügende Text" zuletzt angezeigt wird. Beim zweiten wirdtac
es erneut umbrochen, sodass die eingefügte Zeile am Anfang steht und die Originaldatei in der ursprünglichen Reihenfolge vorliegt.quelle
Eine andere Lösung mit Aliasen. Fügen Sie Ihrer init rc / env-Datei Folgendes hinzu:
Verwendung:
quelle