値を対応する値+定数に置き換える方法

値を対応する値+定数に置き換える方法

G1からG229までの変数を含むファイルがあります。 G230からG469に交換したいです。どうすればいいですか?このbashスクリプトを試しましたが、うまくいきません。

#!/bin/bash

for num in {1..229}
  do
  echo G$num
  N=$(($num+229))
  echo G$N  
  sed -i -e 's/$G$num/$G$N/g' file
done

ベストアンサー1

これはより多くの作業です(ところでperlGNUはこれをsedコピーしました):-i

perl -pi -e 's{\$G\K\d+}{
  if ($& >= 1 && $& <= 229) {
    $& + 229
  } else {
    $&
  }}ge' file

またG0001に変更されますG230。これを望まない\d+場合に変更できます[1-9]\d*

あなたのアプローチを使用すると、参照を変更してもファイルを229回書き直し、必要に応じて機能しなくなります。

A はs/\$G1/\$G230/gに変更され$G12$G2302次はs/\$G2/\$G231/gに変更されますG231302(s/\$G23/\$G252に変更される式G2521302で続きます)。

おすすめ記事