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

如何提取Shell字符串中最后两个双引号之间的内容?

提取字符串最后两个双引号间内容的方法

你手里的字符串是text="abcdef\"gfijk\"lmno\"",要提取最后两个双引号之间的lmno,之前用&操作符是错误的——bash参数展开里没有&这种用法,正确的操作可以用以下几种方式:

方法一:Bash 参数展开(纯shell处理)

利用bash的参数展开特性,分两步截取:

text="abcdef\"gfijk\"lmno\""
# 第一步:删除最后一个双引号及之后的所有内容
temp=${text%\"*}
# 第二步:删除最后一个双引号及之前的所有内容
result=${temp##*\"}
echo $result  # 输出 lmno
  • ${var%pattern}:从字符串末尾开始,删除最短匹配的pattern(这里\"*匹配双引号加任意字符)
  • ${var##pattern}:从字符串开头开始,删除最长匹配的pattern(这里*\"匹配任意字符加双引号)

方法二:Awk 分割字段

把字符串按双引号分割,直接取倒数第二个字段:

text="abcdef\"gfijk\"lmno\""
echo "$text" | awk -F '"' '{print $(NF-1)}'
  • -F '"':指定双引号为字段分隔符
  • NF是当前行的字段总数,NF-1就是倒数第二个字段,正好对应最后两个双引号之间的内容

方法三:Sed 正则替换

用正则匹配最后两个双引号间的内容,替换整个字符串为目标内容:

text="abcdef\"gfijk\"lmno\""
echo "$text" | sed 's/.*"\([^"]*\)".*/\1/'
  • .*":匹配到最后一个双引号之前的所有内容
  • \([^"]*\):捕获最后两个双引号之间的所有非引号字符(这就是我们要的内容)
  • ".*:匹配最后一个双引号及之后的内容
  • \1:引用捕获到的内容,替换整个字符串

内容的提问来源于stack exchange,提问作者Ziv M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:35:24