给定字符串:
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";
答案 0 :(得分:4)
sed的正则表达式匹配最长的字符串,而不是最短的字符串。因此,/\(.*\.html\)
匹配第一个 /
到 last .html
。
由于您的数据以逗号分隔,因此可以轻松解决问题:将.*
替换为[^,]*
。因此,请尝试:
sed -e "s|/\([^,]*\.html\)|$(pwd)&|g" file
答案 1 :(得分:2)
对于实现延迟量词的Perl解决方案:
perl -pe "s|(/.*?\.html)|$(pwd)\1|g" file