2012-01-31 55 views
2

文件名:stackgroup.aclsed将删除用户在SVN访问控制列表

[groups] 
stackoverflow=linus,steve,bill,adrian 
stackexchange=charlie,darwin,carol,kelly 

我需要的SED代码,可以消除用户无论是在该行,或者它的结束的开始。

这是我走到这一步:

sed 's/\(.*=*\)linus,\(.*\)/\1\2/g' 
sed 's/\(.*=*\)steve,\(.*\)/\1\2/g' 
sed 's/\(.*=*\),adrian\(.*\)/\1\2/g' 

,你可以看到,中间的一个是好的,但第一和最后一个用户将留下一个额外的逗号。

我甚至使用正则表达式的尝试:

sed 's/\(.*=*\),\?linus,\?\(.*\)/\1\2/g' 

sed 's/\(.*=*\),*linus,*\(.*\)/\1\2/g' 

,但它不工作。

任何人都可以帮忙吗?

+0

你必须使用SED ?你可以在Python中使用'','''join'(x在names.split(“,”)如果x!=“linus”)来做到这一点' – 2012-01-31 06:17:24

+0

脚本是用linux bash脚本编写的,所以我想我只是扩展功能。 – LynxLee 2012-01-31 06:19:27

回答

3

使用两个表达式,第二届一个发生在那里的名字是=

#!/bin/bash 

user="linus" 
sed "s/,\?$user//;s/=,/=/" stackgroup.acl 
+0

谢谢。有道理。 – LynxLee 2012-01-31 06:46:56

0

后直接边缘情况下照顾这可能会为你工作:

v1=charlie;v2=darwin;v3=kelly 

sed s'/'"$v1"',\?\|,'"$v1"'$//' <<<"stackexchange=charlie,darwin,carol,kelly" 
stackexchange=darwin,carol,kelly 
sed s'/'"$v2"',\?\|,'"$v2"'$//' <<<"stackexchange=charlie,darwin,carol,kelly" 
stackexchange=charlie,carol,kelly 
sed s'/'"$v3"',\?\|,'"$v3"'$//' <<<"stackexchange=charlie,darwin,carol,kelly" 
stackexchange=charlie,darwin,carol 
sed s'/'"$v3"',\?\|,'"$v3"'$//' <<<"stackexchange=kelly" 
stackexchange=