sed中$字面量匹配疑问:为何${projects.version}能被正常替换?
为什么sed中$在两种场景下表现不同?
sed默认使用基本正则表达式(BRE),$的特殊含义仅在特定场景生效:
- 当$出现在正则表达式的末尾位置时,它才是行尾锚点,用来匹配一行的结束位置,比如
sed -e 's/world$/test/g' test.txt里的$就是这种情况,所以能精准匹配行尾的"world"。 - 当$后面还有其他字符(比如你的例子里的
{),它就会被当作普通的字面量字符处理,不会触发行尾锚点的功能。
在命令sed -e 's/${projects.version}/20.0/g' test.txt中,${projects.version}里的$后面紧跟着{,并非正则的末尾,所以sed把它当作普通字符,整个${projects.version}会作为字面字符串去匹配替换。
如果你的目标是匹配行尾的{projects.version},需要把$放在正则的末尾,比如写成sed -e 's/{projects.version}$/20.0/g' test.txt,这时候$才会作为行尾锚点生效。
内容的提问来源于stack exchange,提问作者Mohammad Karmi
相关产品推荐
相关产品推荐

