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


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

awk 文本处理 sed

catcab 10 years, 3 months ago

个人感觉学学awk还是比较好的
而且也不难学 linux下用的也很广
就算不做运维 学了也没有坏处

常盘台的电磁炮 answered 10 years, 3 months ago

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


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

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

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

上條·當麻 answered 10 years, 3 months ago

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

liAya answered 10 years, 3 months ago

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

萝莉萝莉控 answered 10 years, 3 months ago

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

结论:没有必要呀。

Milian answered 10 years, 3 months ago

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

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

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


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

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

3. 综合

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

asdas answered 10 years, 3 months ago

Your Answer