Ich habe ein externes Programm, das eine Ausgabedatei erzeugt (groß, 20K Zeilen möglich).
Ich muss eine neue Zeile zwischen der vorhandenen Zeile 1 und Zeile 2 einfügen. Ich habe awk und sed betrachtet - ich verwende ziemlich regelmäßig jeweils eine Zeile - aber ich konnte nicht mit den richtigen Schaltern zu kommen mach das.
text-processing
sed
awk
Tim Brigham
quelle
quelle
awk 'NR==2 {print "new line"} 1'
Für Ihren speziellen Fall sollte dies einfacher sein:
Erläuterung: Führen Sie in Zeile 1 die folgenden Schritte aus
Anschließend wird die Zeile (jetzt leer) als Teil des Zyklus erneut gedruckt.
Wenn Sie eine neue Zeile anstelle eines neuen Zeilenzeichens hinzufügen möchten (was ich ursprünglich verstanden habe), verwenden Sie einfach
sed
den Befehla\
(Anhängen):oder auch
Es wird "
appended line
" nach Zeile 1 angehängt .quelle
sed -i '1 a\\' file
für nur eine newline.'1 aapended line'
Beispiel.Ich denke der
sed
Ansatz wäre:sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Dadurch wird der Text in die zweite Zeile der Datei geschrieben, und die eigentliche zweite Zeile in der Datei wird zur dritten.
Beachten Sie, dass im Anhänge-Modus , falls erforderlich , die erste Zeile verwendet werden musste, da das Anhängen nach der angegebenen Zeilennummer erfolgt.
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt
quelle
Erläuterung.
quelle
Das könnte für Sie funktionieren:
Wenn Sie
something
nach dem Zeilenumbruch einfügen möchten:Oder wenn Sie Griffe sed
\n
:Natürlich
a
ist es noch einfacher:quelle
\n
Zeile an die erste an!Ich benutze normalerweise
ed
dafür:Ähnlich wie bei einer
sed
Lösung, jedoch ohne das Durcheinander von entkommenen Zeilenumbrüchen.quelle
echo
‚s, besonders unterbash
:ed - filename <<< $'1a\nLine to insert\n.\nw'
.dash
, was auf vielen Systemen der Fall ist/bin/sh
.echo
". Sparing allecho
‚s in der Tat istbash
nur Funktion, aber dieecho
Reduktionszahl von 4 auf 1 Werken indash
undksh
zu:echo '1a\nLine to insert\n.\nw' | ed - filename
.printf %s\\n
, die eine neue Zeile nach jedem arg bringt Sie geben und nicht vermasseln auf Sonderzeichen in der Leitung eingebettet Sie einfügen möchten. Warum auch verwenden,ed
wennex
verfügbar?Python-Lösung
quelle
Verwenden von
sed
und (Bash-spezifischen) ANSI-Escape-Codes:quelle
Ich würde dafür Python verwenden
quelle
Ich benutze einfach gerne einen expliziten Zähler:
quelle
Einfachste Methode verwendet
printf
undex
:1a
bedeutet "nach der ersten Zeile anhängen"; das.
beendet das Anhängen;x
bedeutet speichern und beenden.quelle
In keiner der obigen Antworten wird erwähnt, wie die Änderungen in der Originaldatei gespeichert werden sollen. Ich denke, das OP hat danach gefragt.
Es ist sicherlich das, was ich brauchte, wenn ich auf die Seite kam.
Angenommen, Ihre Datei heißt
output.txt
Mein besonderer Anwendungsfall ist das automatische Hinzufügen einer XML-Stylesheet-Deklaration zu einer Junit-XML-Datei.
quelle