2016-04-28 6 views
3

Это моя строка:Как использовать 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/.*supportData="A\([0-9]\+[-][A-Z]\+[0-9]\+\)".*/\1/' | cut -c3,8,9'.
Это дает мне правильный результат, но мне было интересно, могу ли я непосредственно сделать это через sed.
Любая помощь будет оценена по достоинству. Благодаря

ответ

4

Вы можете использовать эту 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" 

Выход:

203 
+0

Thanks Это работает, но не на всей цепочке. Вся моя строка: '' –

+0

Готово. пожалуйста, проверьте –

+0

Действительно извините за редактирование строки снова, это работает только незначительные изменения в строке, будет очень ценю вашу помощь –

0

Попробуйте это:

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

Вы можете использовать что-то вроде этого:

$ 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 
$ 
Смежные вопросы