我有这一行,我想在url之后更改端口:
url: 'http://mypage5.url.com:2567',
我正在尝试使用以下正则表达式将其替换为sed:
sed -i "s/:[0-9]{4,5}/:$OTHERNUMBER/" $FILENAME
它什么也没做。我试过只匹配一个数字(:[0-9]),它工作正常。我可能做错了什么?
答案 0 :(得分:0)
sed使用自己的regex syntax:
\{i,j\}
i
和j
之间的匹配,包括序列。
所以你必须逃避花括号:
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