![多次替换字符串中间的整数(Bash Sed?)](https://linux22.com/image/172301/%E5%A4%9A%E6%AC%A1%E6%9B%BF%E6%8D%A2%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E9%97%B4%E7%9A%84%E6%95%B4%E6%95%B0%EF%BC%88Bash%20Sed%EF%BC%9F%EF%BC%89.png)
仍在研究我的 sed 使用情况,但这是一个非常简单的总结:
我想替换字符串中的整数并执行 x 次。用户将输入一个带有“&Page=#&PageSize=#”的字符串,如下所示,从那里必须更改整数,并且每次更改都必须将其附加到文件中。
20601300929&Page=1&PageSize=96
需要替换的很简单,就是“Page=1”到“Page=2”。我可以构建一个增加整数的计数器,但我需要的是自动执行识别和替换整数的过程,然后将每个计数的更改附加到文本文件中。
预期结果将是一个简单的文件,其中包含:
20601300929&Page=1&PageSize=96
20601300929&Page=2&PageSize=96
20601300929&Page=3&PageSize=96
... Until 100
答案1
你可以用 awk 来做到这一点:
echo '20601300929&Page=1&PageSize=96' |
awk -F "Page=" '
{
split($2,a,"&")
for (i=int(a[1]);i<=100;i++){
print $1 FS a[1]++ "&" a[2]
}
}'
字段分隔符设置为Page=
,因此该字段$2
出现1&PageSize=96
在我们的示例中。
该split
位根据数字和字符串的其余部分 ( ) 拆分第二个字段&
并将其放入其中。a[1]
a[2]
PageSize=96
最后,在打印语句中,所有内容都粘合在一起。
答案2
也许是重击
num=96
counter=1
limit=100
var='20601300929&Page=#&PageSize=#'
while ((counter<=limit)); do
if [[ $var =~ ([^\&]+)(\&[^\&]+)(.+) ]]; then
printf '%s\n' "${BASH_REMATCH[1]}${BASH_REMATCH[2]/\#/$((counter++))}${BASH_REMATCH[3]/\#/$num}"
fi
done