You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:53:12