多次替换字符串中间的整数(Bash Sed?)

多次替换字符串中间的整数(Bash Sed?)

仍在研究我的 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


相关内容