我有一个路径作为shell脚本中的字符串,可以是绝对的或相对的:
/usr/userName/config.cfg
要么
../config.cfg
我想提取文件名(在最后一个之后的部分,所以在这种情况下:"config.cfg")
我认为最好的方法是使用一些简单的正则表达式?它是否正确?我应该或应该使用sed还是awk?
Shell脚本的字符串操作功能本身看起来非常具有初衷性,并且显得非常深奥.
任何示例解决方案也受到赞赏.
如果您对使用bash没问题,可以使用bash字符串扩展:
FILE="/path/to/file.example" FILE_BASENAME="${FILE##*/}"
它有点神秘,但是大括号开始变量扩展,而double hash从字符串的开头贪婪地删除指定的glob模式.
Double %%在字符串末尾执行相同的操作,单个百分比或散列执行非贪婪删除.
此外,还提供了一个简单的替换构造:
FILE=${FILE// /_}
例如,将用下划线替换所有空格.
再次单一斜线,非贪婪.
我只是使用而不是字符串操作
file=`basename "$filename"`
编辑:
感谢放松一些新的语法(假设您的文件名保存在$ filename中):
file=$(basename $filename)