Ich habe mehrere Dateien, die ASCII-Textinformationen in den ersten 5-10 Zeilen enthalten, gefolgt von gut tabellierten Matrixinformationen. In einem Shell-Skript möchte ich diese ersten Textzeilen entfernen, damit ich die reinen Matrixinformationen in einem anderen Programm verwenden kann. Wie kann ich dazu Bash-Shell-Befehle verwenden?
Wenn es Hilfe gibt, verwende ich RedHat und ein Ubuntu-Linux-System.
sed -i -e 1,3d yourfile
. Dies wird nichts wiedergeben, sondern lediglich die Datei direkt ändern. Wenn Sie das Ergebnis nicht an einen anderen Befehl weiterleiten müssen, ist dies einfacher.sed -i
speziell. Die meisten Implementierungen löschen einfach die Datei und ersetzen sie durch eine neue, was bei Links nicht funktioniert, da Sie das Original an seinem anderen Speicherort belassen.sed -i '1,3d' file.txt
Dadurch werden die ersten 3 Zeilen aus der Datei file.txt gelöscht.
quelle
Wenn es sich bei den tabellierten Zeilen um Zeilen mit Tabulatorzeichen handelt:
(
␉
als wörtliches Tabulatorzeichen) oder gleichwertigIn einem bash / ksh / zsh-Skript können Sie
$'\t'
für eine Registerkarte schreiben , z . B.grep $'\t'
odersed -n $'/\t/p'
.Wenn Sie 10 Zeilen am Anfang der Datei entfernen möchten:
(Beachten Sie
+11
, dass 10 Zeilen entfernt werden sollen, da+11
dies "ab Zeile 11 beginnen" bedeutet und die Zeilen mit den Endnummern von 1 beginnen) oderUnter Linux können Sie die
-i
Option von GNU sed nutzen , um Dateien direkt zu ändern:Oder Sie können eine Shell-Schleife und temporäre Dateien verwenden:
Oder wenn Sie die Dateien nicht ändern möchten, sondern stattdessen einen anderen Namen vergeben möchten:
quelle
Sie können Vim im Ex-Modus verwenden:
1
in die erste Zeile gehen5
Wählen Sie 5 Zeilend
löschenx
speichern und schließenquelle
echo "a \ nb" | sed '1d' # löscht die erste Zeile
cat list.txt | sed '1d'> list.csv # list.txt lesen und list.csv ohne erste Zeile schreiben
Andere nützliche Befehle:
grep '^ |' # findet erstes Zeichen (Pipe |)
sed 's / | // g' # löscht die Pipe
sed 's / // g' # löscht Leerzeichen
quelle
Prozentual
Verwenden Sie
bash
, um eine Datei mit einer Prozentzahl anstelle einer absoluten Anzahl von Zeilen zu bereinigen:Beachten Sie, dass dieser Befehl destruktiv sein kann, da er den Inhalt direkt löscht, ohne eine Kopie zu erstellen.
Die ersten 75% der Zeilen werden aus der genannten Datei gelöscht.
quelle