2016-04-28 4 views
0

私はこのケースで順次TRコマンド3回を使用します。複数のtrコマンドを組み合わせることは可能でしょうか?

tr -d [[:digit:]] | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]\nčšž' 

それは1つのTRコマンドで3つのTRコマンドを組み合わせることが可能ですか? または、何か方法があります、それをより速く行う方法はありますか?

+2

「:alnum:」を3番目の「:al:」に変更して最初のものを削除するだけで、1番目と3番目を確実に組み合わせることができます。 –

+1

と言っていますが、これを短い文字列のためにbashから呼び出すと、 'tr'を完全に削除し、代わりにシェル組み込み関数を使用することで*ベスト*のパフォーマンスが得られるでしょう。 (trを開始する)起動コストは、組み込み操作に比べてより速い実行時間性能から得られるものを上回ります。 –

+0

...特定のbashバージョンを使用していますか? –

答えて

2

あなたはbashの通過文字列をパイプしていると仮定してみましょう:

# this is your starting code 
f() { tr -d [[:digit:]] | tr '[:upper:]' '[:lower:]' | tr -cd '[:alnum:]\nčšž'; } 

# defining a test variable 
s='hello123WORLD456'$'\n''čšž' 

f <<<"$s" # writes "helloworld", a newline, then "čšž" 

...彼らは両方のすべての文字を削除(同一の基本的な操作を実行していることから自明第1、第3の組み合わせにより変更することができます指定されたセット - でも2例1セット中の場合は、排他的な方法で定義される):

# this behaves the same way 
f() { tr '[:upper:]' '[:lower:]' | tr -cd '[:alpha:]\nčšž'; } 

...近代的なbashのリリースを実行している場合は、あなたと同じことを行うことができますパラメータの拡張のペアは、実行のオーバーヘッドのいずれもなしでtr:まったく同じです:

関連する問題