在bash中,我想获取文件夹路径中最后一个文件夹的名称。
例如,给定../parent/child/
,我想要"孩子"作为输出。
使用bash以外的语言,此正则表达式可用.*\/(.*)\/$
works。
这是我在bash中的一次尝试:
echo "../parent/child/" | sed "s_.*/\(.*?\)/$_\1_p"
这给了我错误:
sed: -e expression #1, char 17: unterminated `s' command
我有什么不明白的?
答案 0 :(得分:1)
您的脚本存在的一个问题是"s_.*/\(.*?\)/$_\1_p"
内部$_
被shell解释为变量名称。
您可以用双引号替换双引号,也可以转义$
。
一旦修复,.*?
可能会或可能不会与sed
的实施一起使用。写一些大致相当于更广泛支持的内容会更加健壮,例如:
sed -e 's_.*/\([^/]*\)/$_\1_'
请注意,我删除了p
的{{1}}标记,以避免两次打印结果。
最后,一个更简单的解决方案是使用sed
命令。
basedir
最后,使用参数扩展也可以使用本机Bash解决方案:
$ basename ../parent/child/
child
答案 1 :(得分:0)
你也可以使用剪切
cout <<s[n+2]