Ich hätte gerne ein Skript namens lines.sh
, an das ich Daten weiterleiten kann, um eine Reihe von Zeilen auszuwählen.
Zum Beispiel, wenn ich folgende Datei hätte:
test.txt
%Vor%Dann könnte ich rennen:
%Vor%und es würde
ausgeben %Vor%Ich benutze zsh, würde aber eine Bash-Lösung bevorzugen, wenn möglich.
Zwei reine Bash-Versionen. Da Sie nach allgemeinen und wiederverwendbaren Lösungen suchen, können Sie sich auch ein wenig anstrengen. (Siehe auch letzten Abschnitt).
Dieses Skript schlürft die gesamte stdin in ein Array (mit mapfile
, also ist es ziemlich effizient) und druckt dann die Zeilen, die in seinen Argumenten angegeben sind. Bereiche sind gültig, z. B.
Sie können diese durch Leerzeichen oder Kommas trennen. Die Zeilen werden genau in der Reihenfolge der Argumente gedruckt:
%Vor%druckt Zeile 1 zweimal, dann Zeile 2, dann Zeile 4, dann Zeilen 1, 2 und 3, dann alles von Zeile 4 bis zum Ende und schließlich wieder Zeile 1.
Hier geht's:
%Vor%Diese Version behebt das vorherige Problem von unendlichen Streams. Sie verlieren jedoch die Fähigkeit, Zeilen zu wiederholen und neu anzuordnen.
Gleiches gilt für Bereiche:
%Vor%druckt die Zeilen 1, 4, 5, 6, 9 und alles bis zum Ende. Wenn die Menge der Zeilen beschränkt ist, wird sie beendet, sobald die letzte Zeile gelesen wird.
%Vor%Wenn Sie wirklich ein geniales allgemeines Skript wollen, das Version 1 und Version 2 tut und mehr, sollten Sie auf jeden Fall eine andere Sprache verwenden, z. B. Perl: Sie werden viel (insbesondere Geschwindigkeit) gewinnen! Du wirst in der Lage sein, schöne Optionen zu haben, die viel cooleres Zeug machen. Es lohnt sich auf lange Sicht, da Sie ein allgemeines und wiederverwendbares Skript haben möchten. Vielleicht hast du sogar ein Skript, das E-Mails liest!
Disclaimer. Ich habe diese Skripte nicht gründlich überprüft ... also hüte dich vor Fehlern!
Wenn es sich um eine einmalige Operation handelt und es nicht viele Zeilen zum Auswählen gibt, können Sie auswählen , um sie manuell auszuwählen:
%Vor%Es öffnet sich ein interaktiver Bildschirm, in dem Sie auswählen können, was Sie möchten.
Nun, vorausgesetzt, dass:
Sie könnten etwas wie:
verwenden %Vor%Wobei -f2,4 die Zeilen angibt, die Sie extrahieren möchten
Tags und Links linux bash sed text-processing