使用Regex从UNIX路径中提取用户名

时间:2010-07-06 13:02:28

标签: regex unix

我需要使用以下格式从Unix路径获取用户名: /家庭/用户/名为myUsername /项目/数量/文件

我只想要“myusername”我已经尝试了近一个小时,我完全无能为力。

有什么想法吗?

谢谢!

5 个答案:

答案 0 :(得分:5)

也许只是/home/users/([a-zA-Z0-9_\-]*)/.*

请注意,关键部分[a-zA-Z0-9_\-]*必须包含unix用户名的所有有效字符。我从here开始,用户名应该只包含数字,字符,破折号和下划线。

另请注意,提取的用户名不是完整匹配,而是第一组(由(...)表示)。

答案 1 :(得分:2)

最好的答案取决于你想要达到的目标。如果您想知道拥有该文件的用户,那么您可以使用stat命令,但遗憾的是,这取决于操作系统的语法略有不同,但是以下两个命令可以正常工作

Max OS / X

stat -f '%Su' /home/users/myusername/project/number/files

红帽/ Fedora的/ Centos的

stat -c '%U' /home/users/myusername/project/number/files

如果你确实想要/ home / users之后的字符串,那么上面提供的任何一个Regex都会这样做,你可以在bash脚本中使用它,如下所示(Mac OS / X)

USERNAME=$(echo '/home/users/myusername/project/number/files' | \
  sed -E -e 's!^/home/users/([^/]+)/.*$!\1!g')

答案 2 :(得分:1)

检查http://rubular.com/r/84zwJmV62G。用户名是第一个匹配,而不是整个匹配。

答案 3 :(得分:1)

在bourne shell中的内容如下:

string="/home/users/STRINGWEWANT/some/subdir/here"
echo $string | awk -F\/ '{print $3}'

将是一个选项,假设它始终是路径的第三个元素。有更多的轻量级只使用shell内置:

echo ${x#*users/}

将删除所有内容,包括'users /'

echo ${y%%/*}

将删除其余部分。

所以要把它们放在一起:

export path="/home/users/STRINGWEWABT/some/other/dirs"
export y=`echo ${path#*users/}` && echo ${y%%/*}
STRINGWEWABT

同时检查bash联机帮助页并搜索“参数扩展”

答案 4 :(得分:0)

(\/home\/users\/)([^\/]+)

第二个捕获组(索引1)将为myusername