tr (translate) 到 sed 和 awk 的主要区别

use*_*970 7 sed awk utilities text-processing tr

AFAICsed和AFAIC 都是awk通用文本处理实用程序,用户可以使用它们获得非常相似的结果,但语法略有不同:

通过两者,用户可以添加、替换/翻译和删除文件中的内容。

这两个通用文本处理实用程序和tr文本处理实用程序之间的主要区别是什么?

我假设tr's 的功能包含在两者中sedawk因此它只是缩小到一个字符串替换为另一个字符串的特定上下文,但我不确定我在这里是否准确或翻译为另一个。

Kus*_*nda 6

是的,tr是一个“简单”的工具相比,awksed,两者awksed可以很容易地模仿基本的行为,但没有的sedawk已经“tr建成”,在这个意义上,有在他们一些单件事究竟做了所有的事情那tr确实。

tr处理字符,而不是字符串,并将字符从一组转换为另一组中的字符(如转换tr 'A-Z' 'a-z'为小写输入)。它的名字是“translate”或“transliterate”的缩写。

它确实有一些不错的特性,比如能够删除多个相同的连续字符,用单个sed表达式实现可能有点繁琐。

例如,

tr -s '\n'
Run Code Online (Sandbox Code Playgroud)

将输入中的所有连续换行符压缩为单个换行符。

粗略地描述这三个工具:

  • tr 适用于字符(更改或删除它们)。
  • sed 在行上工作(修改单词或行的其他部分,或插入或删除行)。
  • awk处理带有字段的记录(默认情况下,一行中的空格分隔字段,但这可以通过设置FS和进行更改RS)。


Mic*_*mer 6

sed有一个y类似于命令tr

ÿ /字符串1 /字符串2 /

string1 中所有出现的字符替换为string2 中的相应字符。

$ echo 'a big cat' | sed -e 'y/abc/def/'
d eig fdt
Run Code Online (Sandbox Code Playgroud)

y不支持字符范围a-z或类[:alpha:] 喜欢tr,也没有补充的模式-c-C-d可以使用删除 ( ),也可以s//使用单个字符 ( -s)替换运行。就像所有内容一样,sed它基本上是面向行的。y有时在较长的sed脚本中间很有用,但tr如果您只做这些,可能会做得更好。

awk没有等效于tr的基本功能,尽管您当然可以一次替换一个字符。awk 语言非常通用,如果您有足够的动力,您可以编写足以实现您想要的任何转换的循环和条件。如果你更有动力,你也可以做到这sed一点。这些工具在任何意义上都不是真正等效的。