2012-01-31 20 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=