我在 shell 脚本中有一个字符串形式的路径,可以是绝对路径或相对路径:
/usr/用户名/config.cfg
或
../config.cfg
我想提取文件名(最后一个/之后的部分,因此在本例中为:“config.cfg”)
我认为最好的方法是使用一些简单的正则表达式? 它是否正确?我应该还是应该改用 sed 或 awk?
Shell 脚本的字符串操作功能本身看起来非常原始,而且看起来非常深奥。
也欢迎任何示例解决方案。
最佳答案
如果您不介意使用 bash,则可以使用 bash 字符串扩展:
FILE="/path/to/file.example"
FILE_BASENAME="${FILE##*/}"
有点神秘,但是大括号开始变量扩展,双散列从字符串的开头贪婪地删除指定的 glob 模式。
双 %% 从字符串末尾开始执行相同的操作,而单个百分比或哈希执行非贪婪删除。
此外,还提供了一个简单的替换结构:
FILE=${FILE// /_}
例如,将用下划线替换所有空格。
又是一个单斜杠,是非贪婪的。
关于regex - 在 shell 脚本中进行字符串操作的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/638991/