正好匹配4位数不起作用

时间:2015-02-22 11:15:09

标签: regex bash

我有这一行,我想在url之后更改端口:

url: 'http://mypage5.url.com:2567',

我正在尝试使用以下正则表达式将其替换为sed:

sed -i "s/:[0-9]{4,5}/:$OTHERNUMBER/" $FILENAME

它什么也没做。我试过只匹配一个数字(:[0-9]),它工作正常。我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

sed使用自己的regex syntax

  

\{i,j\}
    ij之间的匹配,包括序列。

所以你必须逃避花括号:

sed -i "s/:[0-9]\\{4,5\\}/:$OTHERNUMBER/" $FILENAME

一个逃脱是针对sed,另一个是针对bash。 sed会看到\{4,5\}

答案 1 :(得分:0)

在我的Mac上:

$ cat file.txt 
url: 'http://mypage5.url.com:44445'
url: 'http://mypage5.url.com:44445'

$ export OTHERNUMBER=3434; sed -Ei ""  "s/:[0-9]{4,5}/:$OTHERNUMBER/" file.txt ; cat file.txt 
url: 'http://mypage5.url.com:3434'
url: 'http://mypage5.url.com:3434'

我使用扩展正则表达式选项(-E),这样就不必那么多了。

-E Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's).

在linux上,我相信,你可以做(​​没有方便的linux盒子,但这应该是这样的):

sed -Ei "s/:[0-9]{4,5}/:$OTHERNUMBER/" file.txt