Bash变量中删除最后斜杠及之前内容并赋值的方法
嘿,这个需求其实用Bash自带的功能就能轻松搞定,比调用sed这类外部命令更高效,当然也给你补上sed的方案,看你习惯哪种~
方法1:Bash内置参数扩展(首推!)
Bash的参数扩展里有专门针对字符串前缀/后缀处理的语法,刚好能解决你的问题。用${myVar##*/}就能直接提取最后一个斜杠之后的内容,然后重新赋值给myVar就行。
举个实际例子:
# 假设你的变量初始值是这样 myVar="/usr/local/var/logs/baz1234_" # 用参数扩展提取目标内容并重新赋值 myVar="${myVar##*/}" # 验证结果 echo "$myVar" # 会输出 baz1234_
简单解释下语法:##表示匹配最长的前缀,*/表示匹配从字符串开头到最后一个斜杠的所有内容(包括斜杠本身),所以${myVar##*/}就是把这部分前缀删掉,剩下的就是你要保留的部分。这个方法纯Bash内置,不用调用任何外部工具,速度快还稳定,几乎所有现代Bash环境都支持。
方法2:用sed处理变量内容
如果你更习惯sed的用法,也可以把变量内容通过管道传给sed来处理:
myVar="/usr/local/var/logs/baz1234_" myVar=$(echo "$myVar" | sed 's/.*\///') echo "$myVar" # 同样输出 baz1234_
sed的正则.*\/会匹配从字符串开头到最后一个斜杠的所有字符(.*匹配任意长度的任意字符,\/是转义后的斜杠),s/.*\///就是把这部分内容替换为空,剩下的就是最后斜杠后的内容。记得给$myVar套双引号,避免遇到空格或特殊字符时出问题。
方法3:awk辅助方案
另外也可以用awk的字段分隔功能来实现,把斜杠作为分隔符,直接取最后一个字段:
myVar="/usr/local/var/logs/baz1234_" myVar=$(echo "$myVar" | awk -F '/' '{print $NF}') echo "$myVar" # 输出 baz1234_
-F '/'指定字段分隔符为斜杠,$NF是awk里的内置变量,表示最后一个字段,刚好对应你要保留的内容。
总结一下,优先选方法1的参数扩展,简洁又高效;如果一定要用sed的话,方法2完全能满足需求~
内容的提问来源于stack exchange,提问作者jlnkls
相关产品推荐
相关产品推荐

