2015-01-16 1 views
-1

펄과이 문을 대체 하시겠습니까 :BASH : 현재 위치에서 선수 교체를 SED와 PERL을 교체하는

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

SED (예를 들어 훨씬 덜 강력한 정규식 엔진을 가지고 있기 때문에

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

와 그것은 look-arounds를 지원하지 않습니다)이 작업은 완전한 질의 된 URL의 도메인 이름 만 일치시키는 sed 호환 정규 표현식을 작성하는 것으로 귀결됩니다. 예 :

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' 행을 변경한다는 점에 유의하십시오. –

관련 문제