![字符串操作](https://linux22.com/image/1087571/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%93%8D%E4%BD%9C.png)
var="<string> 1.11 </string>"
<string>
我 想摆脱 </string>
我该怎么做?
现在我得到了这个:
var=${var:9:4}
1.11
答案1
您可以用于sed
字符串操作:
echo '$var = <string> 1.11 </string>' | sed -r 's/<string>(.*)<\/string>/\1/g'
返回
$var = 1.11
构造解释sed
:
sed -r # call sed with regex-option (-r)
's/ # begin of regex (s means "replace, / is the seperator)
<string>(.*)<\/string> # construct that should be replaced (the / has to be escaped with \ here)
/ # seperator
\1 # replacement string (\1 means "whatever is matched between the () before")
/g' # apply replacement globally (in case it occurs multiple times in the string)
答案2
我正在使用另一种解决方案:
echo '$var = <string> 1.11 </string>' | awk -F'> | <' '{print $1,$3}'
我所做的是定义>
和<
作为分隔符并在分隔符之间打印某些字段。
答案3
Bash 也有自己的正则表达式。但是,它们不如 sed 中的那么强大。以下代码无需调用外部程序即可发挥神奇的作用:
var="<string> 1.11 </string>"
first=${var#<*>}
second=${first%<*>}
#echo $first
echo $second
我也尝试过一步完成,但没有成功,因为 bash 正则表达式不支持非贪婪正则表达式。我尝试了这样的方法:
${var//<*>}
代码删除了从第一个<
到最后一个的所有内容>
。:(
我相信它可以一步完成
${string/substring/replacement}
${string//substring/replacement}
但我现在没时间进行实验。有关详细信息,请参见此处:http://www.tldp.org/LDP/abs/html/string-manipulation.html