AFAICsed
とawk
AFAICはどちらも、ユーザーが非常によく似た結果を得るために使用できる汎用テキスト処理ユーティリティですが、構文は若干異なります。
両方を使用すると、ユーザーはファイルの内容を追加、交換/翻訳、および削除できます。
これら2つのプレーンテキスト処理ユーティリティとtr
テキスト処理ユーティリティの主な違いは何ですか?
私が想定している機能は両方tr
に含まれているので、特定のコンテキストで範囲が狭くなりましたsed
。awk
変えるある文字列は別の文字列にリンクされていますが、ここで私が正しいかどうかはわかりません。翻訳するそれは別のものを提供します。
答え1
はい、tr
銀と比較して「簡単な」ツールで、簡単に模倣できます。awk
sed
awk
sed
最大デフォルトの動作ですが、単一の項目があるため、「組み込み」ではなく、組み込まれていませんsed
。awk
tr
正確にすべきことをすべて実行してくださいtr
。
tr
文字列以外の文字で作業し、ある文字セットを別の文字セットに変換します(tr 'A-Z' 'a-z'
小文字の入力など)。その名前は「翻訳する」または「翻訳する」の略語です。
複数の同じ連続文字を削除する機能など、いくつかの素晴らしい機能がありますが、単一のsed
式で実装するのはやや面倒です。
例えば、
tr -s '\n'
入力のすべての連続改行文字を単一の改行文字に圧縮します。
また、ユーティリティtr
は行の長さに関係なく、sed
操作を実行する前にメモリ内の行全体を読み取ろうとします(つまり、awk
処理する前にレコード全体を読み取ろうとします)。これはいくつかの劣化の場合に当てはまります。問題 すべてのデータは、数ギガバイトの長さの「ワイヤ」にあります。
これら3つのツールを概説すると、次のようになります。
tr
役割に適用されます(変更または削除)。sed
行に作用します(単語や行の他の部分を変更するか、行を挿入または削除します)。awk
フィールド(デフォルトでは、1行にスペースで区切られたフィールドですが、FS
設定に変更できますRS
)があるレコードに適用されます。
答え2
sed
y
コマンドがありますこれは次のようになります。tr
:
ワイ/文字列1/文字列2/
すべての文字項目を置き換える文字列1その文字と一緒に文字列2。
$ 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
これを行うことができます。これらのツールは、いかなる意味でも実際には同じではありません。
答え3
$ echo ooops not good | tr oops nice
iice nit giid
$ echo oops not good | sed 's/oops/nice/'
nice not good
trは単語単位ではなく文字単位に翻訳するため、正確な順序を持つ文字だけでなく、その文字も変更します。