文件名: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'
但它不起作用。
有人可以帮忙吗?
答案 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=