これman
ページあまり望んでいないが文書化されていない(および/またはGNU固有の)機能であることを願っています。
答え1
これその他のユーティリティUbuntuのパッケージ(そしてDebiansponge
)問題を解決できるプログラムがあります。
スポンジマンから:
Spongeは標準入力を読み取り、それを指定されたファイルに書き込みます。シェルリダイレクトとは異なり、スポンジは出力ファイルを開く前にすべての入力を吸収します。これにより、同じファイルを読み書きするパイプを制限できます。
これにより、次のことができます。
cut -d <delim> -f <fields> somefile | sponge somefile
答え2
あなたはできません。 ed、GNU sed、perl を使用したり、コンテンツ用の新しいファイルを作成するなど、後ろから行うことを行います。
ed
、携帯用:
ed foo <<EOF
1,$s/^\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/
w
q
EOF
グヌsed
:
sed -i -e 's/^\([^,]*\),\([^,]*\),\([^,]*\).*/\1,\3/' foo
真珠:
perl -i -l -F, -pae 'print @F[1,3]' foo
cut
、新しいファイルを作成します(スクリプトが中断された場合は再実行することができるのでお勧めします)。
cut -d , -f 1,3 <foo >foo.new &&
mv -f foo.new foo
cut
、ファイルを適切な場所に置き換えます(所有権と権限は維持しますfoo
が、中断を防ぐ必要があります)。
cp -f foo foo.old &&
cut -d , -f 1,3 <foo.old >foo &&
rm foo.old
私はベースの方法の1つを使用することをお勧めしますcut
。これにより、非標準ツールに頼る必要がなく、作業に最適なツールを使用でき、中断が発生したときの動作を制御できます。
答え3
私はそれ自体では可能ではないと思いますcut
。マニュアルまたは情報ページにありません。次のようなことができます
mytemp=$(mktemp) && cut -d" " -f1 file > $mytemp && mv $mytemp file
mktemp
出力をパイプで接続できる比較的安全な一時ファイルを提供しますcut
。