最近学习了sed
一段时间,感觉很尴尬,因为
- 需要记住单字母命令(
p
,a
,d
, ...) - 的概念单身的保留空间用于记住上下文 - 由其他类似命令控制(
h
,x
,g
, ...)
我对自己说:这不能变得更直观吗?即使用更详细的命令(例如print
代替p
)和更多一buffer – 根据我的需要的标准变量(例如lastUserSeen
)?
然后有人告诉我:
不,绝不使用
h
或除 s、g 和 p(带 -n)之外的任何其他 sed 结构,或者您实际上使用的是在 1970 年代中期 awk 发明时就已过时的结构。如今,人们使用这些其他结构只是为了进行智力锻炼,而不是认真编写软件,因为等效的 awk 解决方案将更清晰、更高效、更便携、更容易维护/增强,并且在其他所有有意义的方面都更好。
awk?我立即跳了起来并爱上了它。我的许多多行程序在第一次运行时就可以工作,无需任何调试。从我此后对awk的研究来看,我认为它能够完全取代sed。或者是否有一些 sed 功能(我错过了)的效果不能通过 awk 轻松实现?awk 用户有什么理由运行 sed 吗?
编辑:这不是一个“哪个更好”的问题,而是功能集的比较。 sed 中是否有一个功能无法在 awk 中同样有效地实现,但它需要更多的 awk 代码?
答案1
对于就地编辑文件的快速而简单的方法,sed
-i 功能比使用 构建类似的东西要容易得多awk
。我承认使用gawk
1.4.0 或更高版本的平台确实具有“就地”功能来解决此问题。
sed -i 's/foo/bar/' filename
sed
由于所有现有脚本都使用它,所以我很不情愿地学习了它。如果有选择,在编写新脚本时,awk
通常会获胜,代码的可读性和可维护性要高得多。