Mit sed
sed
Liest standardmäßig eine durch Zeilenumbruch getrennte Eingabe. Dieser Befehl entfernt alles vor dem letzten \r
in einer Zeile:
sed 's/.*\r//'
Zum Beispiel:
$ echo $'line1\n\hi\rhello\rworld' | sed 's/.*\r//' line1 world
Um dies mit zu verwenden tee
, können wir Prozessersetzung verwenden :
echo $'line1\n\hi\rhello\rworld' | tee >(sed 's/.*\r//' >Outfile)
Unter bash wird das Konstrukt >(...)
als Prozessersetzung bezeichnet . Die Befehle werden in den Parens ausgeführt und in ein dateiähnliches Objekt eingefügt. tee
Schreiben Sie in das dateiähnliche Objekt und die Befehle verarbeiten die Eingabe.
Awk verwenden
In ähnlicher Weise entfernt dies alles vor dem letzten \r
in einer durch Zeilenumbrüche getrennten Zeile:
awk -F'\r' ''
Die Option -F'\r'
setzt das Feldtrennzeichen auf einen Wagenrücklauf. $NF
Daher möchten wir nur das letzte Feld in jeder Zeile mit Zeilenumbruch drucken. Somit ist print $NF
.
Zum Beispiel:
$ echo $'line1\n\hi\rhello\rworld' | awk -F'\r' '' line1 world
Um dies mit zu verwenden tee
:
echo $'line1\n\hi\rhello\rworld' | tee >(awk -F'\r' '' >Outfile)