Ich habe ein extremes Problem und alle Lösungen, die ich mir vorstellen kann, sind kompliziert. Nach meiner Erfahrung mit UNIX / Linux muss es einen einfachen Weg geben.
Ich möchte die ersten 31 Bytes jeder Datei in löschen /foo/
. Jede Datei ist lang genug. Ich bin sicher, jemand wird mir eine überraschend einfache Lösung liefern, die ich mir nicht vorstellen kann. Vielleicht awk?
text-processing
files
sed
awk
von der tann
quelle
quelle
Antworten:
oder schneller, dank Gilles Vorschlag:
Hinweis: Posix-Tail gibt "-c +32" anstelle von "+ 32c" an, aber Solaris-Standard-Tail gefällt nicht:
/usr/xpg4/bin/tail
ist in Ordnung mit beiden Syntaxen.quelle
dd
hier ist übertrieben,tail
ist besser geeignet (einfachere, weniger Risiko eines Killer Tippfehler, keine falschen Nachrichten auf stderr).cut
(sollte das nicht Schwanz sein? ... asis, es funktioniert nicht bei mir .../usr/xpg4/bin
vor/usr/bin
aufPATH
, oder Sie werden in den frühen 1990er Jahren aufgeklebt werden. Viele Unices (z. B. GNU, BusyBox) unterstützen die historische+32c
Syntax nicht mehr und meinen damit eine aufgerufene Datei+32c
(wie es POSIX erfordert).Mit den folgenden Befehlen werden die ersten 31 Bytes abgeschnitten
$file
($file~
als temporäre Kopie verwendet):Sie müssen nur
find
alle Dateien auflisten/foo/
und die beiden oben genannten für jeden$file
gefundenen ausführen .quelle
tail -c +32
gibt seinen Eingang abzüglich der ersten 31 Bytes aus. (Ja, das Argument ist um eins falsch.) Um eine Datei zu bearbeiten, verwenden Sie den Schwamm in einer Schleife. Wenn Sie ihn nicht haben und sich nicht darum kümmern möchten, erledigen Sie ihn in der Shell:Wenn die Befehle aus irgendeinem Grund unterbrochen werden (z. B. aufgrund eines Stromausfalls), kann es schwierig sein, herauszufinden, wo Sie aufgehört haben. Das Schreiben der neuen Dateien in ein separates Verzeichnis würde die Sache erleichtern.
Wenn die Dateien wirklich groß sind (wie im Beispiel), können Sie eine der in diesem Thread genannten Techniken anwenden .
quelle
Sie können Vim im Ex-Modus verwenden:
%
Wählen Sie alle Zeilen aus!
Führen Sie den Befehl ausx
speichern und schließenquelle