免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4145 | 回复: 8

[文本处理] 求教 这个shell如何思路编写 [复制链接]

论坛徽章:
0
发表于 2014-02-27 17:33 |显示全部楼层
本帖最后由 rdcwayx 于 2014-02-28 08:47 编辑

写一个shell  让它能够实现 删除一个process  剩下的自动递减1  或者删除多个 剩下的自动排序
  1. process.count=5

  2. process1.process_id = 324324      2                     #进程全局业务代码
  3. process1.group_id       =  24324                         #进程全局组代码
  4. process1.alias =                                                                                                        
  5. process1.exepath = dev/                   #进程启动路径
  6. process1.cmd_param =
  7. process1.proc_desc =                                                                                             
  8. process1.group_desc = group_desc            
  9. process1.env_process=
  10. process1.timeout_l = 120         
  11. process1.timeout_m = 300            
  12. process1.timeout_h = 600           
  13. process1.restart = 1            
  14. process1.child_restart = 1     

  15. process2.process_id =   453454                          #进程全局业务代码
  16. process2.group_id       =  34534                         #进程全局组代码
  17. process2.alias =                                                                                                           
  18. process2.exepath =                       #进程启动路径
  19. process2.cmd_param =
  20. process2.proc_desc =                                                                                             
  21. process2.group_desc = group_desc            
  22. process2.env_process=
  23. process2.timeout_l = 120         
  24. process2.timeout_m = 300            
  25. process2.timeout_h = 600           
  26. process2.restart = 1            
  27. process2.child_restart = 1     

  28. process3.process_id = 10147112                              #进程全局业务代码
  29. process3.group_id       = 102                           #进程全局组代码
  30. process3.alias =
  31. process3.exepath =            #进程启动路径
  32. process3.cmd_param =
  33. process3.proc_desc =                                                                                               
  34. process3.group_desc = group_desc            
  35. process3.env_process=
  36. process3.timeout_l = 120         
  37. process3.timeout_m = 300            
  38. process3.timeout_h = 600           
  39. process3.restart = 1            
  40. process3.child_restart = 1     

  41. process4.process_id = 10147113                              #进程全局业务代码
  42. process4.group_id       = 102                           #进程全局组代码
  43. process4.alias =
  44. process4.exepath =                   #进程启动路径
  45. process4.cmd_param =
  46. process4.proc_desc =                                                                                                
  47. process4.group_desc = group_desc            
  48. process4.env_process=
  49. process4.timeout_l = 120         
  50. process4.timeout_m = 300            
  51. process4.timeout_h = 600           
  52. process4.restart = 1            
  53. process4.child_restart = 1     

  54. process5.process_id = 10147114                              #进程全局业务代码
  55. process5.group_id       = 102                           #进程全局组代码
  56. process5.alias =                                                                                                         
  57. process5.exepath =                        #进程启动路径
  58. process5.cmd_param =
  59. process5.proc_desc =                                                                                         
  60. process5.group_desc = group_desc            
  61. process5.env_process=
  62. process5.timeout_l = 120         
  63. process5.timeout_m = 300            
  64. process5.timeout_h = 600           
  65. process5.restart = 1            
  66. process5.child_restart = 1   
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2014-02-28 09:03 |显示全部楼层
你要给大家做个演示,比如删除一个process  剩下的自动递减1 的结果,以及删除多个 剩下的自动排序的结果

论坛徽章:
0
发表于 2014-02-28 11:05 |显示全部楼层
回复 1# 西厢了个梦

目测是这个意思。
  1. awk -va=5 -vd=3 '$0 !~ "process"d{for(i=0;i<a-d;i++)gsub("process"d+1+i,"process"d+i,$0);print}'  file
复制代码

论坛徽章:
0
发表于 2014-02-28 14:36 |显示全部楼层
回复 3# yaozhibing41001
感谢 道友 求教一些awk书籍推荐

   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
发表于 2014-02-28 14:50 |显示全部楼层
回复 4# 西厢了个梦


O'Reilly sed & awk 2nd Edition 英文版
http://bbs.chinaunix.net/viewthread.php?tid=1588614#pid11286082

O'Reilly sed & awk 2nd Edition 中文高清修订第3版
http://bbs.chinaunix.net/thread-1743038-1-1.html

论坛徽章:
0
发表于 2014-02-28 17:19 |显示全部楼层
回复 2# rdcwayx
比如我删除了process2起头的行   随后的 process3 process4 process5的行变成process2 process3 process4 只是开头变  随后的都不变  上面count也减1

   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2014-02-28 18:39 |显示全部楼层
  1. #!/usr/bin/env bash

  2. DEL=$1
  3. while read -r line
  4. do
  5.   if [[ "$line" =~ (process.count=)([0-9]*) ]] ; then
  6.      if [[ ${BASH_REMATCH[2]} -lt "$DEL" ]]; then
  7.          echo " wrong count $DEL, exit..."
  8.          exit 1
  9.      else
  10.           ((count=${BASH_REMATCH[2]}-1))
  11.           echo "${BASH_REMATCH[1]}${count}"
  12.           continue
  13.      fi
  14.    fi

  15.    if [[ "$line" =~ (process)([0-9]*)(\..*) ]] && [[ "${BASH_REMATCH[2]}" -eq "${DEL}" ]];then
  16.       continue
  17.    fi

  18.    if [[ "$line" =~ (process)([0-9]*)(\..*) ]] && [[ "${BASH_REMATCH[2]}" -gt "${DEL}" ]];then
  19.       ((count=${BASH_REMATCH[2]}-1))
  20.       echo "${BASH_REMATCH[1]}${count}${BASH_REMATCH[3]}"
  21.       continue
  22.    fi
  23.    echo "$line"
  24. done < file
复制代码
比如把这个文件存为 a.sh

运行  bash a.sh 2 ,得到如下结果。
  1. process.count=4

  2. process1.process_id = 324324      2                     #进程全局业务代码
  3. process1.group_id       =  24324                         #进程全局组代码
  4. process1.alias =
  5. process1.exepath = dev/                   #进程启动路径
  6. process1.cmd_param =
  7. process1.proc_desc =
  8. process1.group_desc = group_desc
  9. process1.env_process=
  10. process1.timeout_l = 120
  11. process1.timeout_m = 300
  12. process1.timeout_h = 600
  13. process1.restart = 1
  14. process1.child_restart = 1


  15. process2.process_id = 10147112                              #进程全局业务代码
  16. process2.group_id       = 102                           #进程全局组代码
  17. process2.alias =
  18. process2.exepath =            #进程启动路径
  19. process2.cmd_param =
  20. process2.proc_desc =
  21. process2.group_desc = group_desc
  22. process2.env_process=
  23. process2.timeout_l = 120
  24. process2.timeout_m = 300
  25. process2.timeout_h = 600
  26. process2.restart = 1
  27. process2.child_restart = 1

  28. process3.process_id = 10147113                              #进程全局业务代码
  29. process3.group_id       = 102                           #进程全局组代码
  30. process3.alias =
  31. process3.exepath =                   #进程启动路径
  32. process3.cmd_param =
  33. process3.proc_desc =
  34. process3.group_desc = group_desc
  35. process3.env_process=
  36. process3.timeout_l = 120
  37. process3.timeout_m = 300
  38. process3.timeout_h = 600
  39. process3.restart = 1
  40. process3.child_restart = 1

  41. process4.process_id = 10147114                              #进程全局业务代码
  42. process4.group_id       = 102                           #进程全局组代码
  43. process4.alias =
  44. process4.exepath =                        #进程启动路径
  45. process4.cmd_param =
  46. process4.proc_desc =
  47. process4.group_desc = group_desc
  48. process4.env_process=
  49. process4.timeout_l = 120
  50. process4.timeout_m = 300
  51. process4.timeout_h = 600
  52. process4.restart = 1
  53. process4.child_restart = 1
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
发表于 2014-02-28 18:41 |显示全部楼层
BASH_REMATCH 这个read-only的数组用法参考: http://bbs.chinaunix.net/thread-4125147-1-1.html

论坛徽章:
0
发表于 2014-03-05 17:35 |显示全部楼层
回复 3# yaozhibing41001
今天又用了一下删除第二个  发现不能匹配二十几的process了  求指教一下

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP