最近几天,在此之前,我一直在询问有关sed和awk.这种情况每当我问awk问题的人说使用sed时,当我问sed问题时,人们会说要使用awk.
任何人都可以给我一些例子,说明我可以使用哪一个.
对我来说,awk习惯于演示和报告没有替代,sed并用于需要更换的东西.
但是仍然有很多人给我举例说明,通过awkprint commnad 完成了替换.
现在我真的很困惑,那是什么用例.
举个例子.假设
我有C++的源代码文件,我想add在特定模式之前使用一些代码.
我应该用什么sed或awk.模式也可以跨越多条线
评论中的链接非常有价值.我会从我个人对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循环,而数字计算等,我会选择awk.虽然在很多情况下也能做到这一点.
sed和awk都不支持Perl Regex.这真遗憾.
所以基本上,我认为awk比sed更灵活,更直接.如果任务相对简单或有着名的魔术sed解决方案(查看http://sed.sourceforge.net/sed1line.txt有很多神奇的单行),我会选择sed.否则我会首先考虑awk.
sed和awk都是非常强大的文本处理工具,linux/unix框中有很多文本处理工具,comm,cut,join,paste,sort,uniq ...它们有很多选项参数.我很懒,不记得所有这些,只是那些常用的.但如果我知道如何使用awk,sed和grep.可以在linux下完成90%的文本处理.如果awk,sed和grep无法完成这项工作,我会转向编程语言.例如python.
好吧,我不是一个perl家伙.
有什么东西我忘记了吗?
我的2cents,希望它有所帮助.