这是我第一次使用bash脚本,所以我很容易犯一个错误。
基本上,我正在尝试编写一个获取用户组的脚本,如果它们在某个组中,它将相应地进行记录。显然会有更多功能,但是当我什至无法使正则表达式正常工作时,毫无意义!
到目前为止,我有这个:
#!/bin/bash
regex="^([a-zA-Z0-9\-_]+ : [a-zA-Z0-9\-_]+) (usergroup)$"
# example output
groups="username : username usergroup"
echo "$groups" >> /home/jrdn/log
if [[ "$groups" =~ $regex ]]; then
echo "Match!" >> /home/jrdn/log
else
echo "No match" >> /home/jrdn/log
fi
我尝试过该正则表达式的每个地方都可以使用。但是在bash脚本中,它只输出$groups
,然后输出No match
。那么有人可以告诉我这是怎么回事吗?
1
是什么让您认为这有什么问题呢?
—
manatwork 2013年
@jrdnhannah然后尝试缓慢地重新创建目标正则表达式,先进行匹配,
—
彼得2013年
^([a-zA-Z0-9\-_]+)
然后添加冒号,以此类推...您应该很快发现问题所在。
与bash 4.2.45相同。转义下划线即可解决此问题。奇怪的。@jrdnhannah你能写出来作为答案并接受吗?
—
terdon
由于我只是刚刚注册了Unix SE,因此需要我等待8个小时才能回答自己的问题。不过,如果有人这样做,我们很乐意将其标记为已回答。
—
2013年
@terdon bash可能只是调用libc的regex函数。因此,它取决于libc版本,而不取决于bash版本。看到我的答案...(或者甚至在您使用的排序规则上)
—
derobert