sed 4.2.2中的数字匹配错误?

时间:2015-10-28 13:27:22

标签: regex linux bash ubuntu sed

我不是sed的新手,但我也很难相信这个古老的产品中有一个可怕的错误,所以我只是想检查一下我是不是做了一些愚蠢的事情。更多地关注它。

我试图从URL字符串中提取一组数字,但是sed似乎匹配每个字符以及数字范围。

if(!is_user_logged_in()):
add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_cart_myfunction' );

function woocommerce_add_cart_myfunction( $cart_item_data ) {

    global $woocommerce;

$numberOfProducts=$woocommerce->cart->cart_contents_count;
    if($numberOfProducts > 1){
         wc_add_notice(
                     __( 'You cannot add another product to your cart.'.$numberOfProducts, 'woocommerce' ));
                return false;
    } 

}
endif;

另一方面,egrep很好地解决了这个问题:

enter image description here

我做错了什么,或者我可能在sed看到一个可怕的错误?

编辑2015-10-29 07:35 这似乎并不特定于sed。 Perl给了我同样的问题:

bdetweiler@HPSin:~$ echo "www.blah.com/012345/moreblah.html" | sed -e 's/\([[:digit:]]*\)/!\1/g'
!w!w!w!.!b!l!a!h!.!c!o!m!/!012345/!m!o!r!e!b!l!a!h!.!h!t!m!l!
bdetweiler@HPSin:~$ echo "www.blah.com/012345/moreblah.html" | sed -e 's/\([0-9]*\)/!\1/g'
!w!w!w!.!b!l!a!h!.!c!o!m!/!012345/!m!o!r!e!b!l!a!h!.!h!t!m!l!
bdetweiler@HPSin:~$ echo "www.blah.com/012345/moreblah.html" | sed -e 's/.*\([0-9]*\).*/!\1/g'
!
bdetweiler@HPSin:~$ echo "www.blah.com/012345/moreblah.html" | sed -e 's/.*\([[:digit:]]*\).*/!\1/g'
!


bdetweiler@HPSin:~$ sed --version 
sed (GNU sed) 4.2.2

bdetweiler@HPSin:~$ uname -a
Linux HPSin 3.13.0-62-generic #102-Ubuntu SMP Tue Aug 11 14:29:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

1 个答案:

答案 0 :(得分:3)

至少有一位数字,如果不是,那么一切都对应模式: - )

echo "www.blah.com/012345/moreblah.html" | sed -e 's/\([[:digit:]]\{1,\}\)/!\1/g'