正则表达式不适用于bash

时间:2016-05-13 12:05:00

标签: regex bash

我的正则表达式:

 (<property\sname=\"uri\"\s[value=\"htttp:\/\/]+(\d+\.)+\d+)+

文字示例:

 <bean id="journeyWSClient" parent="abstractClient" class=" lib.JourneyWSClient">
        <property name="uri" value="http://192.24.342.432:20010/some/path/1_0_0"/>
        <!-- Fortuna -->        
        <!-- property name="uri" value="http://164.7.19.11:20010/some/path/1_0_0"/ -->

它适用于http://regexr.com/,但是当我将正则表达式放在bash脚本中时,它不起作用。我需要逃脱一些角色吗?想法?

仅使用一个正则表达式提取IP的Bonus cookie。

2 个答案:

答案 0 :(得分:2)

\d替换为[0-9],将\s替换为[[:space:]],并将IP匹配部分调整为([0-9]+(\.[0-9]+)+)(或将其简化为([0-9.]+) })以便能够使用${BASH_REMATCH[1]}获取其值:

text='<property name="uri" value="http://192.49.200.142:20010/some/path/1_0_0"/>'
regex='<property[[:space:]]name="uri"[[:space:]]value="http://([0-9]+(\.[0-9]+)+)'
if [[ $text =~ $regex ]]; then
    echo ${BASH_REMATCH[1]};
fi

请参阅IDEONE demo

答案 1 :(得分:0)

看看这对你有用..

value="http:\/\/(([0-9].?)+):

如果您只使用带有http模式的IP

,这对我有用
grep http TEXT_SAMPLE_FILE |sed -E    's;.*value="http://(([0-9].?)+):.*;\1;g'