Wie kann ich die erste Zeile einer Datei löschen und die Änderungen beibehalten?
Ich habe es versucht, aber es löscht den gesamten Inhalt der Datei.
$sed 1d file.txt > file.txt
shell-script
sed
ksh
kickass13
quelle
quelle
sed
können Sie verwendensed -i .bak '1d' file.txt
.ed
.ed
Befehl wäre:printf "%s\n" 1d w q | ed file.txt
(I heart ed)-exec sed -i '1d' {} \;
Eine sehr leichte Alternative besteht darin, alles außer der ersten Zeile "abzuschneiden" (dies kann eine einfache Möglichkeit sein, Dateikopfzeilen im Allgemeinen zu entfernen):
Im Anschluss an @Evan Teitelman können Sie:
So vermeiden Sie eine temporäre Datei. Eine andere Option könnte sein:
Und so weiter. Letzten testen:
Hoppla, wir haben eine neue Zeile verloren (per @ 1_CR-Kommentar unten). Versuchen Sie stattdessen Folgendes:
Kommen Sie zurück zu sed und versuchen Sie:
oder vielleicht
Nebenwirkungen zu vermeiden.
quelle
tail
Trick hat bei mir funktioniert (hat bei einer 130-MB-Datei weniger als 3 Sekunden gedauert). Vielen Dank!echo "$(tail -n +2 file.txt)" > file.txt
ist die perfekte Antwort.Schauen Sie sich auch
sponge
von anmoreutils
.sponge
Hält Daten von der Standardeingabe ein, bis das Schreibende der Standardeingabe geschlossen wird, bevor in eine Datei geschrieben wird. Es wird so verwendet:quelle
Da dieses Thema von Interesse ist, teste ich den Benchmark auf drei Arten:
sed '1d' d.txt > tmp.txt
tail -n +2 d.txt > tmp.txt
sed -i '1d' d.txt
Beachten Sie, dass das Ziel
d.txt
eine 5,4-GB-Datei istErhalten Sie das Ergebnis:
Fazit: Es scheint unten der schnellste Weg zu sein:
sed '1d' file.txt > tmpfile; mv tmpfile file.txt
quelle
sed '1d' d.txt
Methode enthielt denmv
Befehl nicht (so scheint es, als würde sie Ihre Tests lesen) . In meinen Tests auf FreeBSD mit einer 20MB-Dateised -i
war das am schnellsten.ex
kann fürdie direkteBearbeitungohne temporäre Datei verwendet werdenquelle
strace -e open ex -c ':1d' -c ':wq' foo
. ex schneidet die Originaldatei mit der temporären Datei ab, wobei die Option -i von GNU sed das Original mit der temporären Datei überschreibt. Ich bin mir nicht sicher, wie BSD sed funktioniert.Der kürzeste und einfachste Weg, die erste Zeile aus einer Datei zu löschen,
sed
ist:quelle
Sie können Vim im Ex-Modus verwenden:
1
Erste Zeile findend
löschenx
speichern und schließenquelle
Dieser Befehl entfernt 1 Zeile und speichert als "file.txt".
quelle
So löschen Sie eine Praticiler-Zeile in einer Datei
Sed '1d' Datei
Sed '1d3d' Datei
Zeichen in Zeile löschen
1 Löschen Sie die ersten beiden Charter in lin
Sed 's /^..//' Datei
2 Löschen Sie die letzten beiden Zeilen
Sed 's / .. £ //' Datei
3 Leerzeile löschen
Sed '/ ^ £ / d' Datei
quelle
£
≠$
.Könnte vim verwenden, um dies zu tun:
quelle
Katze file01 | sed -e '1,3d'
// zeige Inhalt in file01 aber entferne die erste und dritte Zeile
quelle