Antworten:
Sie könnten dafür verwenden awk.
command | awk '{ if (/pattern/) { print > "match" } else { print > "nomatch" } }'
>druckt alle Ausgaben in die Datei und überschreibt vorhandene Dateien. Es wird nicht so ausgewertet, dass neue Zeilen alte Ausgaben derselben Instanz von überschreiben awk. Das heißt, wenn es mehrere Übereinstimmungen gibt, enthält die Datei "Übereinstimmung" jede Übereinstimmung, die durch getrennt ist OFS. Der Unterschied zwischen >und >>besteht in der Behandlung vorhandener Dateien.
Hier ein sedBeispiel:
Hinweis: Der wBefehl sed überschreibt bei jeder Ausführung des Skripts eine vorhandene Datei, jedoch nur, wenn dieser bestimmte Schreibbefehl ausgelöst wird. daher dierm
rm -f file-{yes,not}
sed -ne '/pattern/bY; w file-not' -e 'b; :Y; w file-yes' file
sed -n '/PATTERN/p;//! w file-not' infile >file-yes
Sie können Dateien in awk anhängen:
awk '{if (/pattern/) print >>"matched"; else print >>"unmatched"; }
oder kürzer:
awk '{print >>(/pattern/?"matched":"unmatched")}'
awkaber an welchem Punkt wertet es das aus>? Wenn es jedes Mal ausgewertet wird, wenn die Bedingung zutrifft, erhalten Sie zwei einzeilige Dateien ...