bash sed不会替换几种搜索模式

时间:2016-07-02 00:29:08

标签: bash replace sed

给定字符串:

var nav_str = "/index.html,/upgrade.html,/backup.html,/clock.html,/reset.html";

应转换为:

var nav_str = "/home/sz/index.html,/home/sz/upgrade.html,/home/sz/backup.html,/home/sz/clock.html,/home/sz/reset.html";

使用以下代码:

sed -i -e "s|/\(.*\.html\)|$(pwd)&|g" $FILE

但只得到:

var nav_str = "/home/sz/index.html,/upgrade.html,/backup.html,/clock.html,/reset.html";

2 个答案:

答案 0 :(得分:4)

sed的正则表达式匹配最长的字符串,而不是最短的字符串。因此,/\(.*\.html\)匹配第一个 / last .html

由于您的数据以逗号分隔,因此可以轻松解决问题:将.*替换为[^,]*。因此,请尝试:

sed  -e "s|/\([^,]*\.html\)|$(pwd)&|g" file

答案 1 :(得分:2)

对于实现延迟量词的Perl解决方案:

perl -pe "s|(/.*?\.html)|$(pwd)\1|g" file