sed删除svn访问控制列表中的用户

时间:2012-01-31 06:15:59

标签: linux svn sed

文件名:stackgroup.acl

[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'

但它不起作用。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

使用两个表达式,第二个表达式处理名称直接位于=

之后的边缘情况
#!/bin/bash

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

答案 1 :(得分: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=