Как использовать «sed» или «awk» для замены строки запроса параметров url

#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