免费注册 查看新帖 |

Chinaunix

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

[文本处理] 替换字符串中变量的值 [复制链接]

论坛徽章:
4
2015年亚洲杯之伊朗
日期:2015-02-07 00:41:202015年亚洲杯之伊朗
日期:2015-02-07 13:02:4115-16赛季CBA联赛之福建
日期:2016-04-24 07:22:5215-16赛季CBA联赛之北控
日期:2016-07-05 15:35:19
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-23 17:46 |只看该作者 |倒序浏览
本帖最后由 520harrison 于 2016-04-23 17:46 编辑

最近在写一个脚本,有一个功能是 将命令传到脚本中,然后批量在远程主机执行
其实在命令行中直接循环执行会更简单点,我这个绕了个弯,只是想把这个功能添加进去

下面是我的思路(正则匹配有问题)

  1. # shell.sh
  2. CMD="$@"
  3. echo "$CMD"
  4. REG="[^\][\"]*\$[{]*[^[:digit:]][[:alnum:]_]*[}\"]*"
  5. while echo $CMD|grep  "$REG" ; do
  6.         CMD1=${CMD%%$REG*}
  7.         CMD2=${CMD#*$REG}
  8.         VAL=$(echo $CMD|sed -e "s#$CMD1##" -e "s#$CMD2##")
  9.         declare | grep "^${VAL#\$}" && VAL=`eval $VAL`
  10.         CMD=${CMD1}${VAL}${CMD2}
  11. done

  12. echo "$CMD"
复制代码
假如我想远程执行如下命令
  1. id $Username | awk -F'[=(,]' '{printf "%-20s%-18s%s:%s","'"$IP"'","'"$Username"'",$2,$4};\
  2.                                 {if(NF>=6) {printf ":";i=6;while (i<NF-2) {printf "%s,",$i;i=i+2};printf "%s",$i};printf "\n"}'
复制代码
我可以这样写
  1. bash shell.sh "id $Username | awk -F'[=(,]' '{printf \"%-20s%-18s%s:%s\",\"'\"$IP\"'\",\"'\"$Username\"'\",\$2,\$4};{if(NF>=6) {printf \":\";i=6;while (i<NF-2) {printf \"%s,\",\$i;i=i+2};printf \"%s\",\$i};printf \"\n\"}' "
复制代码
正则匹配想实现双引号对,还有${} 如: "$Username" "${Username}" $Username
请问,我应该如何改进,或者有其他的办法可以实现,感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP