> brew install moreutils
==> Downloading https://homebrew.bintray.com/bottles/moreutils-0.55.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring moreutils0.55.yosemite.bottle.tar.gz
🍺 /usr/local/Cellar/moreutils/0.55: 67 files, 740K
Schwamm liest die Standardeingabe und schreibt sie in die angegebene Datei. Im Gegensatz zu einer Shell-Umleitung nimmt der Schwamm alle Eingaben auf, bevor er die Ausgabedatei schreibt. Auf diese Weise können Pipelines erstellt werden, die aus derselben Datei lesen und in dieselbe Datei schreiben.
Ich verstehe nicht Bitte geben Sie mir einige nützliche Beispiele.
Was bedeutet aufsaugen ?
expand foo.txt | sponge foo.txt
. Siehe auch: stackoverflow.com/a/33639324/1959808Antworten:
Angenommen, Sie haben eine Datei mit dem Namen
input
, und Sie möchten alle Zeilen entfernen, die mit#
in beginneninput
. Sie können alle Zeilen nicht mit beginnen#
:Aber wie nehmen Sie Änderungen vor
input
? Mit dem POSIX-Standard-Toolchest müssen Sie eine temporäre Datei verwenden, beispielsweise:Mit Shell-Umleitung:
wird abgeschnitten,
input
bevor Sie daraus lesen.Mit
sponge
können Sie:quelle
<>
Operator transformiert werden .>
und<
wird<>
die Datei nur dann beschädigt, wenn wirklich ein Fehler aufgetreten ist. Sie können ganz einfach byteweise damit schreiben. Versuchen Sie es beispielsweise mittr
.<>file
Sie eine Datei zum Lesen und Schreiben öffnen, aber tatsächlich nichts in eine Datei schreiben.<>
eine Datei nicht abgeschnitten wird, sondern lediglich die vorhandenen Bytes durch die neue Ausgabe ersetzt werden. Wenn die neue Ausgabe zu kurz ist, verbleibt am Ende der Datei Restmüll. Wenn die neue Ausgabe jedoch lang genug ist, besteht kein Risiko.Die Homepage von moreutils selbst dokumentiert einen typischen Anwendungsfall:
Hier wird / etc / passwd sowohl geschrieben als auch gelesen und geändert. Wenn Sie stdin nicht vor dem Schreiben auffrischen, ist / etc / passwd möglicherweise beschädigt (da sich die Datei während des Lesens geändert hat).
quelle