如何使用“sed”或“awk”替换url参数查询字符串

Posted

技术标签:

【中文标题】如何使用“sed”或“awk”替换url参数查询字符串【英文标题】:How to use "sed" or "awk" to replace url parameters query string 【发布时间】:2022-01-05 10:33:46 【问题描述】:

我试图用任何 url 的自定义值替换查询字符串。但它没有正确解析它。

echo "http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15&two=16" | sed -e "s!=[^&]*!=SOMETHING!g"

http://sub.domain.com/file.jsp;jsessionid=SOMETHING&two=SOMETHING

但我想要这样的结果

http://sub.domain.com/file.jsp;jsessionid=SOMETHING?one=SOMETHING&two=SOMETHING

有什么方法可以使用sedawk

【问题讨论】:

您还想在括号表达式中排除?[^&?] 【参考方案1】:

试试这个:

#!/bin/bash

url="http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15&two=16"

echo "ORIGINAL: $url"
echo "NEW:      $url" | sed -e 's#\(.*jsessionid=\).*\(?one=\).*\(&two=\).*$#\1SOMETHING1\2SOMETHING2\3SOMETHING3#'

结果:

ORIGINAL: http://sub.domain.com/file.jsp;jsessionid=2e62dbe69850d25bc7c6424ba59db?one=15&two=16
NEW:      http://sub.domain.com/file.jsp;jsessionid=SOMETHING1?one=SOMETHING2&two=SOMETHING3

我使用的方法是保留你想要的一切,并用你想要的价值替换你不想要的东西。因此,将 SOMETHING1-2-3 替换为您想要使用的任何内容。

它确实使它更长但更容易理解,恕我直言。

【讨论】:

【参考方案2】:

使用sed

$ sed 's/=[^?\|&]*/=SOMETHING/g' input_file
http://sub.domain.com/file.jsp;jsessionid=SOMETHING?one=SOMETHING&two=SOMETHING

【讨论】:

以上是关于如何使用“sed”或“awk”替换url参数查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed 或 awk 命令用变量(变量保存 Unix 脚本)查找和替换文本

如何使用 sed/awk 或其他工具辅助查找和替换 12GB 的颠覆转储文件

如何使用 sed、awk 或 gawk 仅打印匹配的内容?

如何在 sed 和 awk(和 perl)中搜索和替换任意文字字符串

如何根据来自不同命令的多行打印输出的输入将文本文件内容替换为“sed”或“awk”?

使用 sed(或 awk 或 tr)将换行符 \n 替换为表达式