1. $ cat prettify.sed
  2. s/,/,\r\n/g
  3. s/\[/\r\n\[\r\n/g
  4. s/\]/\r\n\]\r\n/g
  5. s/{/\r\n{\r\n/g
  6. s/}/\r\n}\r\n/g
  1. $ cat prettify.awk
  2. BEGIN{ depth = 0;}
  3. /\[/ {
  4. sp = 0;
  5. while(sp++ < depth)
  6. printf(" ");
  7. print $0;
  8.  
  9. depth += 1;
  10. }
  11.  
  12. /{/ {
  13. sp = 0;
  14. while(sp++ < depth)
  15. printf(" ");
  16. print $0;
  17.  
  18. depth += 1;
  19. }
  20.  
  21. /\]/ {
  22. if (depth > 1)
  23. depth -= 1;
  24.  
  25. sp = 0;
  26. while(sp++ < depth)
  27. printf(" ");
  28. print $0;
  29. }
  30.  
  31. /}/ {
  32. if (depth > 1)
  33. depth -= 1;
  34.  
  35. sp = 0;
  36. while(sp++ < depth)
  37. printf(" ");
  38. print $0;
  39. }
  40.  
  41. /".*":".*"/ {sp = 0;while(sp++ < depth)printf(" "); print $0;}
  1. $ cat digitalstrategy.json | sed -f prettify.sed | awk -f prettify.awk | head -50
  2. {
  3. "agency":"NSF",
  4. "generated":"2014-08-07 06:38:36",
  5. [
  6. {
  7. "id":"2.1",
  8. "due":"90 Days",
  9. "due_date":"2012\/08\/21",
  10. [
  11. {
  12. "type":"select",
  13. "name":"2-1-status",
  14. "label":"Overall Status",
  15. [
  16. {
  17. "label":"Not Started",
  18. "value":"not-started"
  19. }
  20. {
  21. "label":"In Progress",
  22. "value":"in-progress"
  23. }
  24. {
  25. "label":"Completed",
  26. "value":"completed"
  27. }
  28. ]
  29. "value":"completed"
  30. }
  31. ]
  32. }
  33. {
  34. "id":"2.1.1",
  35. "parent":"2.1",
  36. "text":"Paragraph on customer engagement approach",
  37. "due":"90 days",
  38. "due_date":"2012\/08\/21",
  39. [
  40. {
  41. "type":"textarea",
  42. "name":"2-1-1-customer-engagement-approach",
  43. "label":"Paragraph on customer engagement approach",
  44. [
  45. ]
  46. }
  47. ]
  48. }
  49. {
  50. "id":"2.1.2",
  51. "parent":"2.1",

  1. $ cat prettify.awk
  2. BEGIN{ depth = 0;}
  3. /\[/ {
  4. # sp = 0;
  5. # while(sp++ < depth)
  6. # printf(" ");
  7. # print $0;
  8.  
  9. depth += 1;
  10. }
  11.  
  12. /{/ {
  13. # sp = 0;
  14. # while(sp++ < depth)
  15. # printf(" ");
  16. # print $0;
  17.  
  18. depth += 1;
  19. }
  20.  
  21. /\]/ {
  22. if (depth > 1)
  23. depth -= 1;
  24.  
  25. # sp = 0;
  26. # while(sp++ < depth)
  27. # printf(" ");
  28. # print $0;
  29. }
  30.  
  31. /}/ {
  32. if (depth > 1)
  33. depth -= 1;
  34.  
  35. # sp = 0;
  36. # while(sp++ < depth)
  37. # printf(" ");
  38. # print $0;
  39. }
  40.  
  41. {sp = 0;while(sp++ < depth)printf(" "); print $0;}

Use sed and awk to prettify json的更多相关文章

  1. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  2. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  3. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  4. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  5. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  6. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  7. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  8. sed和awk最佳入门教程

    文档<sed和awk最佳入门教程>——摘自<实战linux shell编程与服务器管理>,简单易懂,适合初学者. 下载地址:http://download.csdn.net/d ...

  9. grep、sed、awk、perl、js、vim等对正则表达式的支持的差别

    grep.sed.awk.perl等对正则表达式的支持的差别 grep 2.5.1 egrep 2.5.1 sed 3.02 sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 ...

随机推荐

  1. Spring学习(三)--高级装配

    一.Spring profile 在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁 移到另外一个环境.开发阶段中,某些环境相关做法可能并不适合迁 移到生产环境中,甚至即便迁移过去也无法正常 ...

  2. android测试开发概念

    一:测试分类 1.分类概览 按测试阶段划分: 单元测试 集成测试 系统测试 验收测试 按是否覆盖源代码: 黑盒测试: 功能测试: 界面测试 逻辑测试 安装测试 应用性测试 兼容性测试 性能测试: 稳定 ...

  3. JAVA模拟Spring实现IoC过程(附源码)

    前言:本人大四学生,第一次写博客,如果有写得不好的地方,请大家多多指正 一.IoC(Inversion of Control)反转控制 传统开发都是需要对象就new,但这样做有几个问题: 效率低下,创 ...

  4. Newtonsoft.Json 转Json字符串为空不序列化

    原文:Newtonsoft.Json 转Json字符串为空不序列化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...

  5. 20191107PHP创建数组练习

    数组练习 <?php //创建的方式 //1 $arr=array(20,30,50); $arr1=[30,60,70]; //3 //当遇到这种情况的时候键(key)是相同的,会取后面的赋值 ...

  6. 20180305-Python中迭代器和生成器

    一.迭代器 迭代器是访问集合元素的一种方式.迭代器从访问到集合的第一个元素开始访问,直到所有元素被访问结束.而且迭代器只能往前访问,不能后退.另外迭代器的另一个优点,不会事先准备好访问的集合的所有元素 ...

  7. 关于GeneXus中的ForeachCommand命令

          首先作为我们开发过程中必不可少的命令For Each 有着无与伦比的重要性 但是我们从Wiki上得知 我们用到的可能只是它一丢丢的能力并没有全部使用出来.        所以 这篇文档将记 ...

  8. 2018-2-13-wpf-绑定-TextLength-

    title author date CreateTime categories wpf 绑定 TextLength lindexi 2018-2-13 17:23:3 +0800 2018-2-13 ...

  9. idea模块搭建新手党常见错误

    一.搭建java和web模块会出现的错误(此篇以分布式模块为例) 1.创建空工程 1.点击file ,在弹出的窗口左侧选项中在最后有一个Empty Project选项.此处就是创建空工程. 2.在此空 ...

  10. spring启动图案修改(纯属好玩)

    在resource目录下新建banner.txt(与application.properties或者application.yml同级) 在里面随便写自己的汉字图案就行了,比如我的: _ooOoo_ ...