没有终结的's'命令,找不到我的错误

时间:2016-02-03 17:59:29

标签: regex bash sed

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

3 个答案:

答案 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'

首先删除行中最后一个冒号之前的所有内容,
然后删除所有域部分(非逗号后跟反斜杠),
然后将逗号更改为空格。