非运维种族有没有必要掌握文本处理的两大神器sed和awk?

发布于 2022-08-29 20:59:48 字数 146 浏览 12 评论 0

一直使用nodejs或者编辑器的正则匹配来做一些复杂的文本处理。有大神推荐用sed和awk,感觉这两个工具属于难于上手,难于精通的类型。
以处理json、html或其他坑爹格式数据的通常情况下,有必要熟练掌握sed和awk吗?掌握后会比使用自己熟悉的语言效率更高吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

在梵高的星空下 2022-09-05 20:59:48

运维和开发人员都有必要学习使用awksed这两个工具。

  • 运维人员利用这两个工具查看日志,可以快速定位问题;
  • 批量修改配置,省去繁琐的重复动作;
  • 这两个工具也经常应用于编写脚本中,这点对于开发人员同样是必要的。

开发人员遇到最多的问题其实就是文本处理,其次才是算法问题或者输入输出问题,awksed这两个工具,配合正则表达式使用,如有神器在手,天下我有的感觉。


但是题主提到通常是为了处理JSONHTML这两种文本的,要知道工具都有它的局限性。

1. 处理JSON

处理JSON时,JavaScript/Node.js大概是这么做的,

var obj = require('./obj.json');
// change obj
obj._id = 1001;
obj._key = "new-key";
// and other codes
// save obj object to obj.json
fs.writeFile('./obj.json', JSON.stringify(obj), function(err) {
    if(err) throw err;
});

使用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/>)两种形式,都是使用awksed工具时经常需要考虑,还有跨行问题。解决这些问题在awk或者sed中都需要扩展(或者高阶)表达式的支持,也要求开发、运维人员能够掌握正则表达式的反向引用、分组、不捕获分组及环视的技巧。不过好像Perl程序员对这些问题不会那么苦恼。

3. 综合

综合题主的情况,我觉得你还是不要伤了给你推荐这两个工具的那位大神的心了,抽空看下嘛,顺便抛几个难题给大婶就好了,难题就从JSONHTML这两种格式文件中设计就好了。
不要谢我。

吃颗糖壮壮胆 2022-09-05 20:59:48

sedawk,就是为了用别人写好的功能,比如一行命令完成替换,切割文件等等。如果之前写过这方面的脚本,就直接用自己的脚本好了,不需要额外增添学习成本。
BTW,sedawk擅长处理结构化的数据,比如log。对于json和html,估计会不够灵活吧。

结论:没有必要呀。

·深蓝 2022-09-05 20:59:48

学了也没有坏处这种废话我就不说了。
如果题主使用 nodejs 也能很好的完成处理文本的需求,其实没必要去学了。因为你已经掌握了一项可以快速的达成目标的技能。

倾`听者〃 2022-09-05 20:59:48

还是掌握点好,会用就行。查日志什么的,这是个神器。

倾城花音 2022-09-05 20:59:48

不一定非得精通。知道什么场景下使用,能查手册或利用网络资源解决问题就行。

秋凉 2022-09-05 20:59:48

sed与awk学习成本太高
所有试图和你传教“我一行指令就能解决问题”的人,都在无声地说明,现有的图形化工具还不够强大。

素罗衫 2022-09-05 20:59:48

处理 json 和 html 用 awk 这类命令行会想死的,复杂格式老老实实写代码解决。CSV 那种才适合 awk。

你是暖光i 2022-09-05 20:59:48

哈哈,标题改了啊……那我没啥说的了,这个看个人爱好了,多了解点东西没坏处,但是花太多时间去深度学习用不着的东西,即浪费时间又容易忘


恕我知识浅薄,我一直认为 sed 和 awk 都是跑在服务器上的,不能跑在浏览器上,所以实在不明白它们跟前端有啥关系。

javascript 本身对文本处理的能力就很强。

即使在后端,一般情况下也不需要使用 awk 或 sed 来处理文本,服务器端的常用语言都可以简单处理文本的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文