非运维种族有没有必要掌握文本处理的两大神器sed和awk?
一直使用nodejs或者编辑器的正则匹配来做一些复杂的文本处理。有大神推荐用sed和awk,感觉这两个工具属于难于上手,难于精通的类型。
以处理json、html或其他坑爹格式数据的通常情况下,有必要熟练掌握sed和awk吗?掌握后会比使用自己熟悉的语言效率更高吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
运维和开发人员都有必要学习使用
awk
和sed
这两个工具。开发人员遇到最多的问题其实就是文本处理,其次才是算法问题或者输入输出问题,
awk
和sed
这两个工具,配合正则表达式使用,如有神器在手,天下我有的感觉。但是题主提到通常是为了处理
JSON
和HTML
这两种文本的,要知道工具都有它的局限性。1. 处理JSON
处理JSON时,JavaScript/Node.js大概是这么做的,
使用
sed
和正则表达式来修改简单的JSON
是可以接受的,但是遇到复杂的JSON
格式那可就是难以想象了。但是如果你不会或者不想写
Node.js
来处理JSON
文件,你更加熟悉shell
脚本,那么我推荐这个工具 jq is a lightweight and flexible command-line JSON processor.从它的简介中也可以看得出jq
工具是和sed
工具等比较相似的,但是比原来的sed
更加适合处理JSON文件。2. 处理HTML时
处理
HTML
时,由于HTML
是标签式语言,包括配对(<tag></tag>
)和自闭合(<tag/>
)两种形式,都是使用awk
和sed
工具时经常需要考虑,还有跨行问题。解决这些问题在awk
或者sed
中都需要扩展(或者高阶)表达式的支持,也要求开发、运维人员能够掌握正则表达式的反向引用、分组、不捕获分组及环视的技巧。不过好像Perl
程序员对这些问题不会那么苦恼。3. 综合
综合题主的情况,我觉得你还是不要伤了给你推荐这两个工具的那位大神的心了,抽空看下嘛,顺便抛几个难题给大婶就好了,难题就从
JSON
和HTML
这两种格式文件中设计就好了。不要谢我。
学
sed
和awk
,就是为了用别人写好的功能,比如一行命令完成替换,切割文件等等。如果之前写过这方面的脚本,就直接用自己的脚本好了,不需要额外增添学习成本。BTW,
sed
和awk
擅长处理结构化的数据,比如log。对于json和html,估计会不够灵活吧。结论:没有必要呀。
学了也没有坏处这种废话我就不说了。
如果题主使用 nodejs 也能很好的完成处理文本的需求,其实没必要去学了。因为你已经掌握了一项可以快速的达成目标的技能。
还是掌握点好,会用就行。查日志什么的,这是个神器。
不一定非得精通。知道什么场景下使用,能查手册或利用网络资源解决问题就行。
sed与awk学习成本太高
所有试图和你传教“我一行指令就能解决问题”的人,都在无声地说明,现有的图形化工具还不够强大。
处理 json 和 html 用 awk 这类命令行会想死的,复杂格式老老实实写代码解决。CSV 那种才适合 awk。
哈哈,标题改了啊……那我没啥说的了,这个看个人爱好了,多了解点东西没坏处,但是花太多时间去深度学习用不着的东西,即浪费时间又容易忘
恕我知识浅薄,我一直认为 sed 和 awk 都是跑在服务器上的,不能跑在浏览器上,所以实在不明白它们跟前端有啥关系。
javascript 本身对文本处理的能力就很强。
即使在后端,一般情况下也不需要使用 awk 或 sed 来处理文本,服务器端的常用语言都可以简单处理文本的。