我何时应该使用sed以及何时应该使用awk

时间:2013-01-09 06:21:29

标签: linux sed awk

最近几天,在此之前,我一直在询问有关sedawk的问题。 每当我问awk问题的人说使用sed时,以及当我问sed问题的人说要使用awk时,就会发生这种情况。

任何人都可以给我一些关于我可以使用每一个的例子。

对我而言,awk用于演示并报告没有替代 并且sed用于需要替换的地方。

但是仍然有很多人给我举例说明,通过awk和print commnad完成了替换。

现在我真的很困惑那是什么用例。

举个例子。假设

我在C ++中有源代码文件,我想在特定模式之前add一些代码。

我应该使用sedawk。模式也可以跨越多行

1 个答案:

答案 0 :(得分:8)

评论中的链接非常有价值。我会从我个人对sed / awk使用的感觉中添加一些内容。

我强调,许多文本处理任务都可以由sed和awk完成。下面的文字只是我个人的感受。

  • 如果我想进行文本处理,并在不生成临时文件的情况下回写原始文件,则sed将获胜。

  • 我喜欢sed的地址,它可以缩短代码。例如3,6{s/a/b/}1~2{s/f/b/}3~5{s/f/b/}

  • 如果你想将匹配的部分传递给外部命令/程序,awk比sed(Gnu sed)更容易。如果你想获得一些乐趣并尝试使用sed,你可以玩游戏:匹配文本,并将部分(\ 1,\ 2等)传递给不同的sed。也就是说,sed嵌套。经过3次,我迷路了...... :)

  • 如果文本以某种方式“列”为基础,在99%的情况下,awk不会让你失望。

  • 如果我想对多个文件进行不同的文本处理,我会选择awk。例如,{001-003}.txt不同的替代要求。

  • awk会擅长多文件之间的连接处理

  • 如果逻辑需要一些结构,比如if-else,for循环,而数字计算等,我会选择awk。虽然在很多情况下也能做到这一点。

  • sed和awk都不支持Perl Regex。很遗憾。

  • 所以基本上,我认为awk比sed更灵活,更直接。如果任务相对简单或有众所周知的魔术解决方案(检查http://sed.sourceforge.net/sed1line.txt有许多神奇的单行),我会选择sed。否则我会首先考虑awk。

sed和awk都是非常强大的文本处理工具,linux / unix框中有很多文本处理工具,comm,cut,join,paste,sort,uniq ...它们有很多选项参数。我很懒,不记得所有这些,只是那些常用的。但如果我知道如何使用awk,sed和grep。可以在linux下完成90%的文本处理。如果awk,sed和grep无法完成这项工作,我会转向编程语言。例如蟒。

好吧,我不是一个perl家伙。

有什么我忘记了吗?

我的2点,希望它有所帮助。