2015-01-16 1 views
-1

Хотел бы заменить это заявление с Perl:BASH: замена PERL с SED для замены на месте

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

с

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

Поскольку СЭД имеет гораздо менее мощный движок регулярных выражений (например, он не поддерживает взгляды) задача сводится к написанию 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 "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'. –

Смежные вопросы