2015-01-16 144 views
-1

想用Perl来代替这种说法:BASH:与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|" 

谢谢:)

+1

但你的预期输出不包含80 –

+0

@AvinashRaj ::谢谢,错过了:) –

回答

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 

您必须在替换部分转义$

+0

谢谢,它的工作。我没有设法考虑否定字符类:) –

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 
+0

请注意,您的正则表达式也改变这个'http:// php2-mindaugasb.c9.io'行。 –