#regex #bash #awk #sed #cut
#регулярное выражение #удар #awk #сед #резать
Вопрос:
Я пытался заменить строку запроса своим пользовательским значением любого URL-адреса. Но он не разбирает его правильно.
echo "http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15amp;two=16" | sed -e "s!=[^amp;]*!=SOMETHING!g" http://sub.domain.com/file.jsp;jsessionid=SOMETHINGamp;two=SOMETHING
но я хочу такого результата
http://sub.domain.com/file.jsp;jsessionid=SOMETHING?one=SOMETHINGamp;two=SOMETHING
Есть ли какой-либо способ сделать это с помощью sed
или awk
Комментарии:
1. Вы также хотите исключить
?
в скобках выражение:[^amp;?]
.
Ответ №1:
Попробуйте это:
#!/bin/bash url="http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15amp;two=16" echo "ORIGINAL: $url" echo "NEW: $url" | sed -e 's#(.*jsessionid=).*(?one=).*(amp;two=).*$#1SOMETHING12SOMETHING23SOMETHING3#'
Результат:
ORIGINAL: http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15amp;two=16 NEW: http://sub.domain.com/file.jsp;jsessionid=SOMETHING1?one=SOMETHING2amp;two=SOMETHING3
Метод, который я использовал, состоит в том, чтобы сохранить все, что вы хотите, и заменить то, чего вы не хотите, желаемыми ценностями. Так что замените ЧТО-нибудь 1-2-3 на то, что вы хотите использовать.
Это действительно делает его длиннее, но проще для понимания, ИМХО.
Ответ №2:
С помощью sed
$ sed 's/=[^?|amp;]*/=SOMETHING/g' input_file http://sub.domain.com/file.jsp;jsessionid=SOMETHING?one=SOMETHINGamp;two=SOMETHING