7

过去几天和在那之前,我一直在问关于sed和的问题awk。每次当我问 awk 问题时人们说使用 sed 并且当我问 sed 问题时人们说使用 awk 时,都会发生这种情况。

谁能给我一些关于我可以在哪里使用每一个的例子。

对我来说,awk习惯于演示和报告没有替换,并且sed用于需要替换的地方。

但是仍然有很多人给了我通过awkprint commnad 完成替换的例子。

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

举个例子。认为

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

我应该使用什么sedawk。图案也可以跨越多行

4

1 回答 1

10

评论中的链接非常有价值。我会根据我个人对 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 循环、while、数字计算等,我会选择 awk。尽管在许多情况下 sed 也可以完成这项工作。

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

  • 所以基本上,我认为 awk 比 sed 更灵活、更直接。如果任务比较简单或者有著名的魔法 sed 解决方案(查看http://sed.sourceforge.net/sed1line.txt有很多魔法单行),我会选择 sed。否则我会首先想到 awk 。

sed 和 awk 都是非常强大的文本处理工具,linux/unix box 中有很多文本处理工具,comm、cut、join、paste、sort、uniq……还有很多选项参数。我很懒,记不住所有的,只记得那些常用的。但如果我知道如何使用 awk、sed 和 grep。linux下可以完成90%的文本处理。如果 awk、sed 和 grep 不能胜任,我会转向编程语言。例如蟒蛇。

好吧,我不是 perl 人。

有什么我忘记了吗?

我的 2cents,希望它有帮助。

于 2013-01-09T10:13:36.963 回答