BASH:用SED替换PERL进行原位替换

时间:2015-01-16 13:30:37

标签: regex bash perl sed

想用perl替换此语句:

perl -pe "s|(?<=://).+?(?=/)|$2:80|"

sed -e "s|<regex>|$2:80|"

由于sed具有功能强大得多的正则表达式引擎(例如它不支持环视),因此任务归结为编写sed兼容的正则表达式以仅匹配完全限定的URL中的域名。例子:

http://php2-mindaugasb.c9.io/Testing/JS/displayName.js
http://php2-mindaugasb.c9.io?a=Testing.js
http://www.google.com?a=Testing.js

应该成为:

http://$2:80/Testing/JS/displayName.js
http://$2:80?a=Testing.js
http://$2:80?a=Testing.js

这样的解决方案就可以了:

sed -e "s|<regex>|http://$2:80|"

谢谢:)

2 个答案:

答案 0 :(得分:2)

使用以下sed命令。

$ sed "s~//[^/?]\+\([?/]\)~//\$2:80\1~g" file
http://$2:80/Testing/JS/displayName.js
http://$2:80?a=Testing.js
http://$2:80?a=Testing.js

您必须逃离替换部分的$

答案 1 :(得分:2)

sed 's|http://[^/?]*|http://$2:80|' file

输出:

http://$2:80/Testing/JS/displayName.js
http://$2:80?a=Testing.js
http://$2:80?a=Testing.js