> 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
スポンジは標準入力を読み取り、それを指定されたファイルに書き込みます。シェルリダイレクトとは異なり、スポンジは出力ファイルを書き込む前にすべての入力を吸収します。これにより、同じファイルを読み書きするパイプラインを構築できます。
分からない。役立つ例をいくつか挙げてください。
soaks upはどういう意味ですか?
input
という名前のファイルがあり、input
の#
で始まるすべての行を削除するとします。次のコマンドを使用すると、#
で始まらないすべての行を取得できます。
grep -v '^#' input
しかし、input
をどのように変更しますか?標準のPOSIXツールチェストでは、次のような一時ファイルを使用する必要があります。
grep -v '^#' input >/tmp/input.tmp
mv /tmp/input.tmp ./input
シェルリダイレクトの場合:
grep -v '^#' input >input
読み込む前にinput
を切り捨てます。
sponge
を使用すると、次のことができます。
grep -v '^#' input | sponge input
moreutilsホームページ 自体は、典型的な使用例を文書化しています。
sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd
ここで、/ etc/passwdは書き込みと読み取りの両方が行われており、変更されています。書き込み前にstdinを改ざんしないと、/ etc/passwdが破損する可能性があります(読み取り中にファイルが変更されたため)。