Bash

多次替換字元串中間的整數(Bash Sed?)

  • May 1, 2020

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

你可以用 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=,因此該欄位$21&PageSize=96我們的範例中。

split位根據數字和字元串的其餘部分 ( )拆分第二個欄位&並將其放入。a[1]``a[2]``PageSize=96

最後,在 print 語句中,所有內容都粘合在一起。

也許 bash

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

引用自:https://unix.stackexchange.com/questions/583655