sed 是否具有优于 awk 的功能?

mir*_*lav 5 sed awk

最近学习sed了一段时间,是很尴尬的经历,因为

  • 需要记住单字母命令 ( p, a, d, ...)
  • 用于记住上下文的单个保持空间的概念– 由其他类似命令控制 ( h, x, g, ...)

我对自己说:这不能更直观吗?即用更详细的命令(例如print代替p)和超过一个缓冲区-根据我的需要(如标准变量lastUserSeen)?

然后有人告诉我

不,永远不要使用h或任何其他 sed 结构,除了 s、g 和 p(带有 -n),否则您实际上正在使用在 1970 年代中期发明 awk 时已经过时的结构。今天人们严格地将那些其他结构用于脑力练习,而不是认真地编写软件,因为等效的 awk 解决方案将更清晰、更高效、更便携、更易于维护/增强,并且在所有其他有意义的方式上都更好。

啊?我立即跳上并爱上了它。我的许多多行程序在第一次运行时就可以工作,没有任何调试。从我后来对awk的研究来看,我认为它能够完全取代sed。或者是否有一些 awk 无法轻松实现的 sed 功能(我错过了)效果?awk 用户是否有任何理由运行 sed?

编辑:这不是“哪个更好”的问题,而是功能集的比较。sed 效果中是否有一个功能无法在 awk 中同样有效地实现,但它需要更多的 awk 代码?

ste*_*eve 3

对于就地编辑文件的快速而简单的方法,sed-i 功能比使用 构建类似的东西要容易得多awk。我承认使用gawk1.4.0 或更高版本的平台确实具有“就地”功能来解决此问题。

sed -i 's/foo/bar/' filename
Run Code Online (Sandbox Code Playgroud)

sed由于所有现有脚本都使用它,所以我很不情愿地学习了它。如果有选择,在编写新脚本时,awk通常会获胜,代码的可读性和可维护性要高得多。

  • `sed -i` 是 GNU `sed` 扩展。GNU `awk` 有类似的扩展(`awk -i inplace`)。 (3认同)