免费注册 查看新帖 |

Chinaunix

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

如何复制/增加域 求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-19 15:05 |只看该作者 |倒序浏览
我需要写个shell,把下面group文件中的用户b所在组改为和用户a一样
比如:
原文件
PM:a,c,b
RD:c,a
ww:b,e
RR:b
EE:e,f

输出为
PM:a,c,b
RD:c,a,b
ww:e
RR:
EE:e,f

请高手帮忙,谢谢

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-04-19 15:13 |只看该作者
回复 1# shawk3


    没看懂!能再解释下么?

论坛徽章:
0
3 [报告]
发表于 2011-04-19 15:28 |只看该作者
回复 2# yinyuemi


就是说检查group中的每行
有a,有b的就不变
有a,无b的就加上b
有b,无a的就删掉b
无a,无b的就不变

这样保证b用户和a用户有相同的权限组

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
4 [报告]
发表于 2011-04-19 15:38 |只看该作者
回复 3# shawk3
  1. echo "PM:a,c,b
  2. RD:c,a
  3. ww:b,e
  4. RR:b
  5. EE:e,f" |awk '{x=sub("a","a")+sub("b","b")}x==2||x==0{print}x==1{if(sub("a","a")==1){print $0",b"} else{sub(/b,?/,"");print}}'
  6. PM:a,c,b
  7. RD:c,a,b
  8. ww:e
  9. RR:
  10. EE:e,f
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-04-19 15:39 |只看该作者
sed 's/\(.*a\)\(.*\)/\1\2,b/g' file | sed '/.*a.*b.*/!s/\(.*\)b\(.*\)/\
1\2/g'| sed 's/\(.*\)b\(.*\)b\(.*\)/\1b\2\3/g'
我写的比较复杂,也就是按照你给的集中情况做的过滤
sed 's/\(.*a\)\(.*\)/\1\2,b/g'  将有a的行,添加b
sed '/.*a.*b.*/!s/\(.*\)b\(.*\)/\1\2/g' 将没有a的行,将b删除
ed 's/\(.*\)b\(.*\)b\(.*\)/\1b\2\3/g' 删除重复的b

等高手给更好的答案吧..

论坛徽章:
0
6 [报告]
发表于 2011-04-19 16:06 |只看该作者
本帖最后由 shawk3 于 2011-04-19 16:10 编辑

回复 4# yinyuemi

下面这样好像就不对了,没有实现按照字段精确判断,可否再帮我一下?
PM:a,ac,b
RD:ac,a
ww:e,bb,b
RR:b
EE:e,f

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2011-04-19 16:31 |只看该作者
本帖最后由 jason680 于 2011-04-19 16:33 编辑
回复  yinyuemi


就是说检查group中的每行
有a,有b的就不变
有a,无b的就加上b
有b,无a的就删掉b ...
shawk3 发表于 2011-04-19 15:28



简化你说的条件:
1. 把b去除
2.如果有a,就加入b
这样可能更简单些....

$ echo 'PM:a,c,b
RD:c,a
ww:b,e
RR:b
EE:e,f' | awk '{sub(/b,?/,"");sub(/,$/,"");if(match($0,"a"))$0=$0",b"}1'
PM:a,c,b
RD:c,a,b
ww:e
RR:
EE:e,f

论坛徽章:
0
8 [报告]
发表于 2011-04-19 16:45 |只看该作者
本帖最后由 where27 于 2011-04-19 17:13 编辑

楼上的想法好
sed -r 's/\<b\>(,|$)//;/\<a\>/s/(,$|$)/,b/' file

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
9 [报告]
发表于 2011-04-19 16:48 |只看该作者
还是用 \<b\> 这样的限定好一些,如果一个用户是 cb ,那么上面的代码就有问题了。

论坛徽章:
0
10 [报告]
发表于 2011-04-19 17:11 |只看该作者
本帖最后由 where27 于 2011-04-19 17:13 编辑

确实,我偷懒了,已修改
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP