質問: 「カット」でファイルを変更できますか? man page はあまり期待できませんが、ドキュメント化されていない(またはgnu固有の)機能であることを願っています。
回答: まあ、cutは読み取りよりも出力が少ないので、次のことができます。cut -c1 < file 1<> file つまり、そのstdinをfileを読み取り専用モードで開き、その標準出力をfileを読み取り+書き込みモードで切り捨てずに開く(<>)にします。このようにして、cutはファイル自体を上書きします。ただし、ファイルの残りの部分は変更されません。たとえば、fileに次のものが含まれている場合:foo bar 出力は次のようになります。f b bar f\nb\nはfoo\nを置き換えましたが、barはまだ残っています。 cutが終了したら、ファイルを切り捨てる必要があります。ksh93を使用すると、<>;演算子と同じように機能する<>演算子を使用できます。ただし、コマンドが成功した場合、ftruncate()がファイル記述子で呼び出されます。そう:cut -c1 < file 1<>; file 他のシェルでは、次のような他の方法でftruncate()を実行する必要があります。{ cut -c1 < file; perl -e 'truncate stdout, tell stdout';} 1<> file ただし、そのためにperlを呼び出すのは、特にperlがcutのような仕事を簡単に実行できることを考えると、ここでは少しやりすぎです。perl -pi -e '$_ = substr($_, 0, 1)' file 実際のインプレース書き換えを含むすべての方法で、操作が途中で中断されると、ファイルが破損することに注意してください。一時的な2番目のファイルを使用すると、この問題を回避できます。