Bash
多次替換字元串中間的整數(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
你可以用 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
最後,在 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