メモの日々


2017年11月17日(金) [長年日記]

[howto][shell][unix][soft] ワンライナーで同名ファイルへの上書き出力

シェルのリダイレクトを使って同名ファイルへの上書き出力を行うとファイルの中身が消えてしまう。

$ cat a
3
2
1
$ sort a > a
$ cat a

これを防ぐのにspongeというコマンドが使えることを知った。

$ cat a
3
2
1
$ sort a | sponge a
$ cat a
1
2
3

spongeはmoreutilsというツールコレクションの1つとして開発されているようで、moreutilsパッケージをインストールすれば使えるようになる。

ついでに、spongeコマンドを使ってやりたかった作業をメモ。

$ find . -name $PATTERN | xargs -I{} sh -c 'cut -f 1-2,4-44,47- {} | sponge {}'

パターンにマッチする全TSVファイルの3,45,46列目を削除したかった。