ファイルを所定の位置から「切り取り」に変更できますか?

ファイルを所定の位置から「切り取り」に変更できますか?

これ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

答え4

POSIX Awkでフルルックサウンドを使用できます。

cut -b1 file | awk 'BEGIN{RS="";getline<"-";print>ARGV[1]}' file

はい

関連情報