我在shell脚本中有一个字符串作为字符串,可以是绝对的或相对的:
/usr/userName/config.cfg
或
../的config.cfg
我想提取文件名(在最后一个之后的部分,所以在这种情况下:“config.cfg”)
我认为最好的方法是使用一些简单的正则表达式? 它是否正确?我应该或应该使用sed还是awk?
Shell脚本的字符串操作功能本身看起来非常具有推动力,看起来非常深奥。
也欢迎任何示例解决方案。
答案 0 :(得分:11)
如果您对使用bash没问题,可以使用bash字符串扩展:
FILE="/path/to/file.example"
FILE_BASENAME="${FILE##*/}"
它有点神秘,但是大括号开始变量扩展,而double hash从字符串的开头贪婪地删除指定的glob模式。
Double %%在字符串末尾执行相同的操作,而单个百分比或散列执行非贪婪删除。
此外,还可以使用简单的替换构造:
FILE=${FILE// /_}
例如,会用下划线替换所有空格。
再次单一斜线,非贪婪。
答案 1 :(得分:6)
我只使用
而不是字符串操作file=`basename "$filename"`
修改强>:
感谢您放松一些更新的语法(假设您的文件名保存在$ filename中):
file=$(basename $filename)
答案 2 :(得分:1)
答案 3 :(得分:1)
我通常使用带有简单正则表达式的sed,如下所示:
echo "/usr/userName/config.cfg" | sed -e 's+^.*/++'
结果:
>echo "/usr/userName/config.cfg" | sed -e 's+^.*/++'
config.cfg