0

私は次のコマンドを持っています:

cat original.txt | tr [:upper:] [:lower:] | tr -d [:digit:] | 
tr -d [:punct:] > preproces.txt

そして、システムは私に次のエラーを返します。

翻訳する場合、replaceStringに表示される可能性のある文字クラスは「upper」と「lower」のみです。

問題は与えることです:

tr -d [:punct:]

この問題の解決策は何ですか?

GoogleとStackOverflowを検索しましたが、この問題に対する答えが見つかりません。

小さな編集(ただし、カット&ペーストでは重要):[:punct:]の前に「--d」を「-d」に変更しました。「-d」は「\ 342 \ 200 \ 223d」としてレンダリングされ、レンダリングされた違いはほぼでした。目に見えない。

4

3 に答える 3

2

次のようなことを試してみると、表示されていると言ったメッセージのみが表示されます。

tr '[:alpha:]' '[:digit:]'

使用できました

tr -d '[:punct:]'

問題なく句読点を削除します。例えば:

$ echo "tr '[:alpha:]' [:digit:] <chkit.sh" | tr -d '[:punct:]'
tr alpha digit chkitsh
$

これは、RHEL 5 for x86 / 64(trバージョン'tr(GNU coreutils)5.97')にありました。

引数をtr引用符で囲んだことに気付くかもしれません(通常はsingleの方が安全ですが、singleまたはdoubleでもかまいません)。ディレクトリに1文字のファイル名が潜んでいる場合、シェルが角かっこを文字クラスとして解釈し、それらの名前をに渡すときに問題が発生する可能性がありますtr。あなたがファイルを持っていたとしましょうp

tr [:upper:] [:lower:]

そのコマンドは現在tr p [:lower:]です。発生するエラーは少し異なりますが、問題がそれに関連している可能性があります。シェルのメタ文字には十分注意してください。引用符はあなたの友達です。

二重角かっこはソリューションの一部ではないことに注意してください。

$ echo "tr -d '[[:alpha:]]' <chkit.sh" | tr -d '[[:alpha:]]'        
 - '::' <.
$
于 2012-05-23T23:56:40.440 に答える
1

次のコマンドを試してください。

tr '[:upper:]' '[:lower:]' < original.txt  |
    tr -d '[:digit:]' |
    tr –d '[:punct:]' > preproces.txt

これは猫の悪名高い無用な使用を避けます:

http://iki.fi/era/unix/award.html

于 2012-05-23T20:27:51.950 に答える
0

および文字クラスをtrサポートしていない場合は、それらを明示的に指定する必要があります。[:digit:][:punct:]

tr '[:upper:]' '[:lower:]' < original.txt  |
    tr -d '0-9!"#$%&'"'"'()*+,./:;<=>?@[\\]^_`{|}~-' > preproces.txt

tr -d(2つのコマンドを1つにマージするためのリファクタリングtr -d '[:digit:][:punct:]'は、元のコマンドでも実行できます。)

の定義はhttp://www.regular-expressions.info/posixbrackets.html[:punct:]から取得されました。検証を試みていませんが、互換性を持たせるために少しリファクタリングし、ここで発生するシェルコンテキストを確認しました。tr

于 2014-10-21T10:38:53.777 に答える