web-dev-qa-db-ja.com

tr(翻訳)からsedおよびawkへの主な違い

AFAICのsedawkはどちらも汎用のテキスト処理ユーティリティであり、これを使用すると、わずかに異なる構文で非常に類似した結果を得ることができます。

どちらの場合でも、ユーザーはファイルのコンテンツを追加、置換、翻訳、削除できます。

これら2つの汎用テキスト処理ユーティリティとtrテキスト処理ユーティリティの主な違いは何ですか?

trの機能はsedawkの両方に含まれていると想定しているため、特定のコンテキストreplaceing別の文字列に限定されます。しかし、私がここで正確であるかどうか、またはtranslating別のものにそれが正しいかどうかはわかりません。

4
user9303970

はい、trawksedに比べて「シンプルな」ツールであり、awksedはどちらも簡単に模倣できます- mostは基本的な動作の1つですが、sedawkも、「trが組み込まれている」という単一の要素があるという意味で正確にtrが行うすべてのことを行います。

trは文字列ではなく文字に対して機能し、あるセットの文字を別のセットの文字に変換します(tr 'A-Z' 'a-z'のように小文字の入力に変換します)。その名前は「translate」または「transliterate」から短くなっています。

これには、同じである複数の連続した文字を削除できるなど、いくつかの素晴らしい機能があります。単一のsed式で実装するのは少し面倒かもしれません。

例えば、

tr -s '\n'

入力から連続するすべての改行を単一の改行に圧縮します。

3つのツールを大まかに特徴付けるには:

  • trは文字を処理します(変更または削除します)。
  • sedは行で機能します(単語または行の他の部分を変更するか、行を挿入または削除します)。
  • awkはフィールドのあるレコードで動作します(デフォルトでは、行で空白で区切られたフィールドですが、FSRSを設定することで変更できます)。
4
Kusalananda

sedにはyコマンドがありますtr に類似しています:

y/string1/string2/

string1内のすべての文字をstring2内の対応する文字に置き換えます。

$ echo 'a big cat' | sed -e 'y/abc/def/'
d eig fdt

yは、文字範囲a-zまたはクラス[:alpha:]trのように をサポートしていません。また、補集合モード-cおよび-Cもサポートしていません。ランを単一の文字(-d)で置き換えるように、s//では削除(-s)が可能です。すべてのsedと同様に、基本的に行指向です。 yは、より長いsedスクリプトの途中で役立つ場合がありますが、trがそれだけの場合は、より良い結果が得られる可能性があります。

awkにはtrの基本機能に相当するものはありませんが、もちろん一度に1文字ずつ置き換えることができます。 awk言語は非常に一般的であり、十分な動機があれば、必要な変換を実装するのに十分なループや条件文を書くことができます。もしあなたがもっとやる気があれば、おそらくsedでそれを管理することもできるでしょう。これらのツールは、まったく同じ意味ではありません。

6
Michael Homer
$ echo ooops not good | tr oops Nice
iice nit giid
$  echo oops not good | sed 's/oops/Nice/'
Nice not good
0
igor Smirnov