Используйте другой разделитель (он не обязательно должен быть /
), чтобы вам не пришлось избегать множества косых черт. Я буду использовать |
в качестве разделителя, и это регулярное выражение будет делать:
sed 's|http[s]\?://[^.]*|http[s]://hostname|'
http[s]\?://[^.]*
получает строку между http://
или https://
и следующим символом точки (в вашем случае, то есть http://test-wls-1
) и преобразует его в http[s]://hostname
, что дает:
$ echo 'URL:http://test-wls-1.compute-1234.cloud.internal .Response code: 503>' |
sed 's|http[s]\?://[^.]*|http[s]://hostname|'
URL:http[s]://hostname.compute-1234.cloud.internal .Response code: 503>
Ваша первоначальная попытка http[s]\?:\/\/[^ ].
соответствует http://
или https://
, за которой следует любой не пробельный символ ( [^ ]
) и любой другой символ (.
). Таким образом, вывод будет
$ echo 'URL:http://test-wls-1.compute-1234.cloud.internal .Response code: 503>' |
sed 's/http[s]\?:\/\/[^ ]./http[s]:\/\/hostname/'
URL:http[s]://hostnamest-wls-1.compute-1234.cloud.internal .Response code: 503>
. Видите, что te
в test-...
отсутствует в выводе.