免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2447 | 回复: 6
打印 上一主题 下一主题

[文本处理] 如果判断并自动替换变量内容? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-05-18 10:30 |只看该作者 |倒序浏览
请问一下,我有以下变量内容:
line="wangxiqi-Workstation; ;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man"
这些信息都是用“;”号做间隔的, 我需要先判断每个间隔原来的数据是否存在。如果存在的话,则不更新。如果是空的例如 "; ;" 则将新的变量自动加入,例如:
machine=wangxiqi-Workstation
user=wangxiqi
ip=10.10.17.30
mac=c4346b5cd373
...

最终变成这样:
line="wangxiqi-Workstation;wangxiqi;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man"

请问一下我如何能做到呢? 先谢谢大家了!!

论坛徽章:
0
2 [报告]
发表于 2019-05-18 11:50 |只看该作者
楼主最好给出多用户数据
目前是单用户数据 还不完整
假设分为a b两个文件

a文件
machine=wangxiqi-Workstation
user=wangxiqi
ip=10.10.17.30
mac=c4346b5cd373
...

怎么来区分第2个用户 以换行形式还是其他形式
或者说以另一个文件来记录用户信息

论坛徽章:
0
3 [报告]
发表于 2019-05-18 15:19 |只看该作者
回复 2# jzsjm1002

谢谢您的支持! 我是以变量的形式获得原始的数据。然后我接着想更新变量的内容。所以不需要读取本地的文件文本。抱歉我表达得不太好。可能很容易让人误解。不好意思哈。

论坛徽章:
0
4 [报告]
发表于 2019-05-18 17:38 |只看该作者
本帖最后由 jzsjm1002 于 2019-05-18 18:46 编辑
  1. cat test.sh
  2. #!/bin/bash
  3. #

  4. i=0
  5. j=0
  6. line[0]="wangxiqi-Workstation; ;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man"
  7. line[1]="wangxiqi-Workstation;wangxiqi; ;c4346b5cd373;linux;HR;3F_A03;man"
  8. line[2]=" ;wangxiqi; ;c4346b5cd373;linux;HR;3F_A03;man"
  9. # 测试数据

  10. info[0]=wangxiqi-Workstation
  11. info[1]=wangxiqi
  12. info[2]=10.10.17.35
  13. info[3]=c4346b5cd373
  14. info[4]=linux
  15. info[5]=HR
  16. info[6]=3F_A03
  17. info[7]=man
  18. # 需要获取的变量值

  19. for num in `seq ${#line[@]}`
  20. do
  21.   IFS=";"
  22.   # 可以将获取到的变量添加到这里 做循环比对
  23.   # 当然 line info 的数据看楼主怎么获取了
  24.   for field in ${line[$j]}
  25.   do
  26.     if [ "$data" == "" ];then
  27.       [ "$field" == " " ] && field=${info[$i]}
  28.       data=$field
  29.     else
  30.       [ "$field" == " " ] && field=${info[$i]}
  31.       data="$data;$field"
  32.     fi
  33.     let i++
  34.   done
  35.   IFS=" ";i=0;let j++
  36.   echo $data
  37.   data=
  38. done

  39. ./test.sh
  40. wangxiqi-Workstation;wangxiqi;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man
  41. wangxiqi-Workstation;wangxiqi;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man
  42. wangxiqi-Workstation;wangxiqi;10.10.17.35;c4346b5cd373;linux;HR;3F_A03;man

  43. #测试结果 字段已经全部补齐了
  44. #整体思路是通过字符串拼接 判断为空 将获取的数据拼接进来
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
yexingqi + 5 赞一个!

查看全部评分

论坛徽章:
0
5 [报告]
发表于 2019-05-20 11:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2019-05-20 15:59 |只看该作者
回复 4# jzsjm1002

谢谢您的帮助!

论坛徽章:
0
7 [报告]
发表于 2019-05-20 16:00 |只看该作者
回复 5# 本友会机友会摄友会

谢谢,想不到在powershell这么简单就搞定...可惜的是有些linux不太方便安装powershell.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP