Regex 如何使用sed获得所需的输出?

Regex 如何使用sed获得所需的输出?,regex,string,bash,unix,sed,Regex,String,Bash,Unix,Sed,这是我的字符串: <InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.267" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267"></InstalledVersion> 我想从中得到的输出是203。A002的最后一个字符和IBY03的最后两个字符。因此,输出为203。 我使用的是sed's/*suppo

这是我的字符串:

<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.267" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267"></InstalledVersion>

我想从中得到的输出是203。A002的最后一个字符和IBY03的最后两个字符。因此,输出为203。
我使用的是
sed's/*supportData=“A\([0-9]\+[-][A-Z]\+[0-9]\+\)”*/\1/'\124; cut-c3,8,9.

这将为我提供正确的输出,但我想知道是否可以通过sed直接执行此操作。
任何帮助都将不胜感激。
谢谢

您可以使用此sed命令:

s='<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.267" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267">'

sed -E 's/.*supportData="[^"]*([0-9])-[^"]*([0-9]{2})".*/\1\2/' <<< "$s"
试试这个:

$ var='supportData="A002-IBY03"'
$ sed -r 's/.*([0-9])-.*([0-9][0-9])"/\1\2/' <<<$var
203
$var='supportData=“A002-IBY03”'

$sed-r's/*([0-9])-.*([0-9][0-9])“/\1\2/”您可以使用如下内容:

$ echo '<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.101" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267">' | sed -r 's/^.*supportData=".{3}([0-9])-.{3}([0-9]{2}).*$/\1\2/'
203
$
$echo'| sed-r's/^.*supportData=“.{3}([0-9])-.{3}([0-9]{2})。*$/\1\2/'
203
$

谢谢,这是有效的,但不知怎么的,不是我的整个字符串。我的全部绳子都断了。请检查真的很抱歉再次编辑字符串这正在工作只是字符串中的一个小更改非常感谢您的帮助我使用您更新的输入进行了测试,此命令仍然输出
203
我得到203和
$ echo '<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.101" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267">' | sed -r 's/^.*supportData=".{3}([0-9])-.{3}([0-9]{2}).*$/\1\2/'
203
$