sudo wbinfo --group-info GROUPNAME| sed -r -e 's/(?:DOMAIN\\(\w+),?)|(?:[^]+:)/$1/g'
此命令会产生
sed: -e expression #1, char 36: unterminated `s' command
的输出
sudo wbinfo --group-info GROUPNAME
就像
GROUPNAME:x:0123456789:DOMAIN\user1,DOMAIN\user2,DOMAIN\user3,...,DOMAIN\userN
我尝试使用(
转义\(
的所有实例,\
转移\\
\\
\\\\
sudo wbinfo --group-info GROUPNAME| sed -r -e s/'(?:DOMAIN\\(\w+),?)|(?:[^]+:)'/$1/g
(更改了引用区域)
sudo wbinfo --group-info GROUPNAME| sed -r -e s/'(?:DOMAIN\\(\w+),?)|(?:[^]+:)/\1/g'
(\1
代替$1
)
我仍然不知道如何得到我需要的东西:
user1 user2 user3 ... userN
答案 0 :(得分:2)
TL; TR
你的尝试太复杂了,你可以简单地使用它:
sed -r 's/[^\]+DOMAIN\\([[:alnum:]]+)/\1 /g'
关于语法错误:
您正在使用sed -r
来启用扩展的posix正则表达式。请注意,在扩展的posix正则表达式中,?
用作可选重复的量词。你需要逃脱它:
sed -r -e 's/(\?:DOMAIN\\(\w+),\?)|(\?:[^]+:)/$1/g'
但是,正则表达式仍然存在问题:您正在使用[^]
。请注意,^
在字符类中使用时,会否定该类的匹配。您正在使用^
,但错过了说哪些字符不匹配。你需要输入类似的东西:
sed -r -e 's/(\?:DOMAIN\\(\w+),\?)|(\?:[^abc]+:)/$1/g'
答案 1 :(得分:1)
awk
救援!
$ ... | awk -F'\\\\' -v RS=, '{print $2}'
会为每行一个用户提供结果,如果您希望它们出现在一行中,请添加... | xargs
答案 2 :(得分:1)
这是sed的另一种方法:
sed -r -e 's/^.*://' -e 's/[^,]+\\//g' -e 's/,/ /g'
首先删除行中最后一个冒号之前的所有内容,
然后删除所有域部分(非逗号后跟反斜杠),
然后将逗号更改为空格。