ファイルから英語以外の英数字をすべて削除したいです。
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
)一緒に指定されます。