AFAICのsed
とawk
はどちらも汎用のテキスト処理ユーティリティであり、これを使用すると、わずかに異なる構文で非常に類似した結果を得ることができます。
どちらの場合でも、ユーザーはファイルのコンテンツを追加、置換、翻訳、削除できます。
これら2つの汎用テキスト処理ユーティリティとtr
テキスト処理ユーティリティの主な違いは何ですか?
tr
の機能はsed
とawk
の両方に含まれていると想定しているため、特定のコンテキストreplaceing別の文字列に限定されます。しかし、私がここで正確であるかどうか、またはtranslating別のものにそれが正しいかどうかはわかりません。
はい、tr
はawk
とsed
に比べて「シンプルな」ツールであり、awk
とsed
はどちらも簡単に模倣できます- mostは基本的な動作の1つですが、sed
もawk
も、「tr
が組み込まれている」という単一の要素があるという意味で正確にはtr
が行うすべてのことを行います。
tr
は文字列ではなく文字に対して機能し、あるセットの文字を別のセットの文字に変換します(tr 'A-Z' 'a-z'
のように小文字の入力に変換します)。その名前は「translate」または「transliterate」から短くなっています。
これには、同じである複数の連続した文字を削除できるなど、いくつかの素晴らしい機能があります。単一のsed
式で実装するのは少し面倒かもしれません。
例えば、
tr -s '\n'
入力から連続するすべての改行を単一の改行に圧縮します。
3つのツールを大まかに特徴付けるには:
tr
は文字を処理します(変更または削除します)。sed
は行で機能します(単語または行の他の部分を変更するか、行を挿入または削除します)。awk
はフィールドのあるレコードで動作します(デフォルトでは、行で空白で区切られたフィールドですが、FS
とRS
を設定することで変更できます)。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
でそれを管理することもできるでしょう。これらのツールは、まったく同じ意味ではありません。
$ echo ooops not good | tr oops Nice
iice nit giid
$ echo oops not good | sed 's/oops/Nice/'
Nice not good