Wenn ich mit potenziell nicht bereinigten Eingaben zu tun habe, möchte ich, dass der gesamte Auftrag zeilenweise zur visuellen Überprüfung "ausgeschrieben" wird, bevor ich ihn ausführe (insbesondere, wenn er destruktiv ist, beispielsweise wenn die Postfächer von Personen gesäubert werden).
Ich erstelle also eine Liste von Parametern (z. B. Benutzernamen) und füttere sie zeilenweise in eine Datei:
johndoe
jamessmith
janebrown
Dann öffne ich die Liste in vim
und zerfleische sie mit Suchen und Ersetzen-Ausdrücken, bis ich eine Liste der vollständigen Befehle erhalte, die ausgeführt werden müssen, wie folgt:
/bin/rm -fr /home/johndoe
/bin/rm -fr /home/jamessmith
Auf diese Weise können Sie bei unvollständigem regulären Ausdruck feststellen, bei welchem Befehl potenzielle Probleme auftreten (z. B. /bin/rm -fr johnnyo connor
). Auf diese Weise können Sie Ihren regulären Ausdruck rückgängig machen und es mit einer zuverlässigeren Version erneut versuchen. Die Namensverfälschung ist dafür berüchtigt, weil es schwierig ist, sich um alle Randfälle wie Van Gogh, O'Connors, St. Clair und Smith-Wesson zu kümmern.
Nachdem set hlsearch
ist dies dafür nützlich vim
, da es alle Spiele werden markieren, so dass Sie leicht erkennen , wenn es nicht in unbeabsichtigter Weise oder Streichhölzer überein.
Sobald Ihre Regex perfekt ist und alle Fälle erfasst, auf die Sie testen / denken können, konvertiere ich sie normalerweise in einen sed-Ausdruck, damit sie für einen weiteren Durchlauf vollständig automatisiert werden kann.
In Fällen, in denen die Anzahl der Eingabezeilen eine visuelle Überprüfung verhindert, empfehle ich dringend, den Befehl vor der Ausführung auf dem Bildschirm (oder besser noch in einem Protokoll) wiederzugeben. Wenn ein Fehler auftritt, wissen Sie genau, welcher Befehl verursacht wurde es zu scheitern. Dann können Sie zu Ihrem ursprünglichen regulären Ausdruck zurückkehren und ihn erneut anpassen.
printf "foo bar\nbaz bat" | xargs echo whee
wird nachgebenwhee foo bar baz bat
. Vielleicht die-L
oder-n
Optionen hinzufügen ?