文字列の途中にある整数を数回置き換える(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ビットは、数字と残りの文字列()に基づいて2番目のフィールドを分割して&内部に配置します。a[1]a[2]PageSize=96

最後に、printステートメントでは、すべてが互いに付着しています。

答え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


関連情報