BASH: 将 PERL 替换为 SED 以进行就地替换

BASH: replacing PERL with SED for in-place substitution

想用 perl 替换此语句:

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

sed -e "s|<regex>|: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://:80/Testing/JS/displayName.js
http://:80?a=Testing.js
http://:80?a=Testing.js

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

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

谢谢:)

使用下面的 sed 命令。

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

替换部分一定要转义$

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

输出:

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