我需要使用以下格式从Unix路径获取用户名: /家庭/用户/名为myUsername /项目/数量/文件
我只想要“myusername”我已经尝试了近一个小时,我完全无能为力。
有什么想法吗?
谢谢!
答案 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