如何在Bash中更改URL参数?

时间:2015-08-08 13:28:10

标签: regex bash url replace parameters

我遇到了以下问题:

我想更改网址的参数。我的想法是首先将参数整体切割为:

url="http://domain.com/file.php?par1=val1&par2=val2&par3=val3"
pars=$(cut -d"?" -f2 <<< $url)

所以现在

echo "$pars"

应该给我一个由“&amp;”分隔的参数列表字符。

par1=val1&par2=val2&par3=val3

我想用变量$ newpar替换val1然后使用curl访问带有更改参数的网站。然后我想将参数更改回val1并将val2更改为$ newpar,依此类推。 我的问题是:我该怎么做?

我不知道会有多少参数,因为$ url变量是从具有不同参数数量的URL的文件中读出的。 我认为某种正则表达式会派上用场,也许for循环可以解决这个问题。但我不确切知道如何。

非常感谢您提前

1 个答案:

答案 0 :(得分:1)

假设var1足够具体,以下内容应该有效:

url=${url/par1=val1/par1=$newpar}

唯一的问题是如果par1可能是另一个参数的后缀,例如

url="http://domain.com/file.php?par1=val1&otherpar1=val2&par3=val3"

在这种情况下,请使用正则表达式确保par1&前面有?

[[ $url =~ (.*)([?&])(par1=val1)(.*) ]]
url="${BASH_REMATCH[1]}${BASH_REMATCH[2]}par1=$newpar${BASH_REMATCH[4]}"

元素1包含在您想要更改的参数之前的?&之前的所有内容。元素2包含? / &。元素2是您要替换的文本;我们使用替换文本而不是该元素。最后,元素3包含您正在更改的参数后面的文本(如果有)。