如何提取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
相关产品推荐
相关产品推荐

