【问题标题】:When should i use sed and when should i use awk [closed]我什么时候应该使用 sed,什么时候应该使用 awk [关闭]
【发布时间】:2012-12-23 03:43:51
【问题描述】:

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

谁能给我一些例子,说明我可以在哪里使用每一个。

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

但仍然有很多人给我提供了通过awk 使用打印命令完成替换的示例。

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

举个例子。假设

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

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

【问题讨论】:

  • 这篇文章可能会有所帮助:stackoverflow.com/questions/366980/…
  • 我确实读过关于其他编程语言的那篇文章,其中 sed , awk 迷路了。我只想现在,如果我们只有 sed 或 awk 两个选项,那么在哪里使用什么

标签: linux sed awk


【解决方案1】:

评论中的链接非常有价值。我会根据我个人对 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,希望对您有所帮助。

【讨论】:

  • 谢谢哥们,我听说过很多关于 perl regex 的东西,那是什么。对我来说,sed 的正则表达式甚至看起来非常强大。
猜你喜欢
  • 2021-07-13
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2012-09-22
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多