如何在Bash中从右侧提取字符串?获取最后一对括号内文本
提取字符串最后一对括号内的文本(Bash实现)
给定示例字符串:
str="Something (perhaps) Something (Whatever) Something (Fred)"
方法一:Bash参数扩展(优先推荐)
利用Bash内置的参数扩展特性,从右往左定位最后一对括号:
# 1. 删除字符串开头到最后一个左括号 `(` 的所有内容,得到 `Fred)` after_last_open="${str##*(}" # 2. 删除末尾的右括号 `)`,得到最终结果 result="${after_last_open%)}" echo "$result" # 输出:Fred
${var##pattern}:贪婪删除前缀,匹配最长的符合pattern的前缀并移除,这里*(}匹配任意字符直到最后一个(${var%pattern}:非贪婪删除后缀,匹配最短的符合pattern的后缀并移除,这里)匹配末尾的右括号
方法二:Bash内置正则匹配
用Bash的=~正则操作符直接捕获最后一对括号内的内容:
if [[ "$str" =~ \(([^)]+)\)$ ]]; then echo "${BASH_REMATCH[1]}" # 输出:Fred fi
- 正则
\(([^)]+)\)$解析:\(:转义左括号,匹配字面量(([^)]+):捕获组,匹配任意非)的字符(即括号内的内容)\):转义右括号,匹配字面量)$:锚定到字符串末尾,确保只匹配最后一对括号
方法三:sed命令(管道处理)
如果需要通过管道批量处理字符串,用sed的替换命令:
echo "$str" | sed 's/.*(\([^)]*\))$/\1/'
.*(\([^)]*\))$:贪婪匹配到最后一对括号,\1引用捕获到的括号内内容- 替换后直接输出目标文本
内容的提问来源于stack exchange,提问作者Howard Rogers
相关产品推荐
相关产品推荐

