trコマンドをその場で使用する方法はありますか?

trコマンドをその場で使用する方法はありますか?

ファイルから英語以外の英数字をすべて削除したいです。

tr -sc '[:alnum:][:punct:]' ' ' <file

gawkそしてフラグがsedありますが、-iマニュアルページにそのようなものが見つかりませんtr

これを内部でどのように実行できますか?つまり、出力を入力ファイル自体に保存しますか?

ベストアンサー1

いいえ。この機能を持つコマンドはほとんどありません。 GNU awk( gawk) は最近この機能を追加しており、その機能がある-i場合、または対応するコマンドの場合でも、バックグラウンドで一時ファイルを作成するだけです。

したがって、これを行う方法は次のとおりです。

tr -sc '[:alnum:][:punct:]' ' ' <file >newfile && mv newfile file

この機能が頻繁に必要な場合は、小さな機能を有効にできます。

tri(){
  tmpFile=$(mktemp)
  echo "$@"
  case $# in
    ## You've given tr options
    4)
      trOpts="$1"
      set1="$2"
      set2="$3"
      inputFile="$4"
      ;;
    ## No options, only set1 and set2 and the input file
    3)
      set1="$1"
      set2="$2"
      inputFile="$3"
     ;;
    ## Something wrong
    *)
      echo "Whaaaa?"
      exit 1
      ;;
  esac
  tr "$trOpts" "$set1" "$set2" < "$inputFile" > "$tmpFile" &&
    mv "$tmpFile" "$inputFile"
}

その後、次のように実行できます。

tri -sc '[:alnum:][:punct:]' ' ' file

realとは異なり、tr入力()をリダイレクトするのではなく、引数としてファイル名が必要です。<fileオプションは上記のように(likeの代わりに-s -c)一緒に指定されます。

おすすめ記事