红联Linux门户
Linux帮助

tr和sed对比

发布时间:2015-03-18 20:59:53来源:红联作者:yuyajun
本篇比较一下tr和sed
tr和sed用于文本的分析,包括删除,替换,当然sed功能要远比这多;
1. tr只做管道命令,接受std in,而sed不仅可以作为管道命令,还可以直接处理文件,如下:
last | tr ‘[a-z]’ ‘[A-Z]’
last | sed ‘1a hello’ ; sed ‘1a hello ’ filename
2. tr作为删除,可以删除一段中的所有指定的字符。如:last | tr -d ‘root’;而sed做为直接删除,删除的是指定的行;last | sed ‘1,7d’,删除1-7行,不指定删除字符,那么是不是代表sed不能删除呢?当然不是:将字符替换成空,不就是删除吗?last | sed ‘s/root//g’;
3. 替换:tr实现如下:last | tr ‘[a-z]’ ‘[A-Z]’,而sed要指定行last | sed ‘1,$s/[a-z]/[A-Z]/g’,也就是tr作用于整段,而sed是自己可以指定的行。
4. tr的主要功能就在上面了,而sed则具有一下tr不具有的功能:
a. 插入:在指定行上面增sed ‘1a hello’;在指定行的下一行增sed ‘1i hello’;
b. 打印:打印指定行:sed -n ‘1,4p’; (加上-n表示只有处理的才会输出,否则输出全部行)
c. 直接修改源文件:sed -i ‘$a test’ filename;
总结:sed功能远远多余tr,在相同功能的部分,tr是对整篇,而sed以行为单位处理。
文章评论

共有 8 条评论

  1. yuyajun 于 2015-03-26 15:35:22发表:

    {:3_107:} 2# 804259355

  2. yuyajun 于 2015-03-26 15:35:00发表:

    {:2_92:} 7# hejianle

  3. hejianle 于 2015-03-25 20:01:08发表:

    {:2_92:} sadasda

  4. yuyajun 于 2015-03-22 18:31:22发表:

    5# acrofox


    谢谢指教!

  5. acrofox 于 2015-03-19 21:04:02发表:

    不完全准确。

    引用:
    3. 替换:tr实现如下:last | tr ‘[a-z]’ ‘[A-Z]’,而sed要指定行last | sed ‘1,$s/[a-z]/[A-Z]/g’,也就是tr作用于整段,而sed是自己可以指定的行。

    ⓵ sed 可以指定行,但不是必须,"1,$" 的地址范围是默认行为,可以省略。
    ⓶ sed 中 's/[a-z]/[A-Z]/g' 会把每个小写字母都替换为 [A-Z] 这个字符串,要实现与 tr 命令一样的功能,应该用 y 命令代替 s 命令。

  6. yuyajun 于 2015-03-19 12:49:40发表:

    3# jackyduys


    谢谢您的评论,对我是种支持

  7. jackyduys 于 2015-03-19 11:01:48发表:

    学习了!!!!!!

  8. 804259355 于 2015-03-19 10:07:28发表:

    asdfasdfadsfasdfasdf345