字符串操作

字符串操作
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

相关内容