何时应该使用sed,何时应该使用awk?

8

最近几天以及之前,我一直在问有关 sedawk 的问题。

每当我问 awk 的问题时,人们就会建议我使用 sed,而我问 sed 问题时,人们又说要用 awk。

有人能否给我一些可以使用它们的示例。

对我来说,awk 用于演示和报告,不是替换,而 sed 则用于需要替换的地方。

但仍然有许多人给了我示例,其中使用 print 命令通过 awk 进行了替换。

现在我真的很困惑它们各自的用例是什么。

例如,假设我有一个 C++ 源代码文件,并且我想在特定模式之前添加一些代码。

我应该使用 sed 还是 awk。模式也可能跨越多行。


这篇文章可能会有所帮助:https://dev59.com/63RC5IYBdhLWcg3wP-Zh - Lei Mou
我读过一些关于其他编程语言的文章,其中sed和awk也会迷失方向。我只想知道如果我们只有两个选项,即sed或awk,那么在哪里使用它们。 - user175386049
1个回答

11

评论中的链接非常有价值。我想从我对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。到第三次后,我迷失了... :)

  • 如果文本某种程度上是“基于列”的,在99%的情况下,awk不会让你失望。

  • 如果我想在多个文件上执行不同的文本处理,则会选择awk。例如:{001-003}.txt 需要不同的替换要求。

  • 在多个文件之间进行类似于连接的处理时,awk会很好用。

  • 如果逻辑需要一些类似于if-else、for循环、while、数字计算等结构,则我会选择awk。尽管在许多情况下,sed也可以胜任这项工作。

  • sed和awk都不支持Perl正则表达式。那真是太遗憾了。

  • 所以基本上,我认为awk比sed更灵活和直接。如果任务相对简单或有着良好知名的神奇sed解决方案(请查看http://sed.sourceforge.net/sed1line.txt中的许多神奇的单行命令),我会使用sed。否则我会优先考虑awk。

  • sed和awk都是非常强大的文本处理工具,在Linux/Unix系统中有许多文本处理工具,如comm、cut、join、paste、sort、uniq等,它们有许多选项参数。我比较懒,不能记住所有的选项,只记得常用的。但如果我知道如何使用awk、sed和grep,90%的文本处理工作将在Linux下完成。如果awk、sed和grep无法胜任,我会转向编程语言(例如Python)。
  • 好吧,我不擅长perl。
  • 还有什么我忘了吗?
  • 这是我的两分钱,希望能帮到你。

谢谢伙计,我听说过很多关于Perl正则表达式的事情,那是什么?对我来说,sed的正则表达式甚至看起来非常强大。 - user175386049

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接