Bashで改行と追加

Bashで改行と追加

ファイルの値を読み、追加、置換するには?

foo="val"
ver="1.2.0001"
...

今、「0001」を「0002」に増やしたいです。

答え1

パッチレベルは常に4桁の文字列であると仮定します。

$ ver=1.2.0001
$ printf '%s\n' "$ver" | awk -F '.' '{ printf("%s.%s.%04d\n", $1, $2, $3 + 1) }'
1.2.0002

awkバージョンを取得し、ドットで区切られた3つのフィールドとして処理します。最初の2つのフィールドはそのまま印刷しますが、3番目のフィールドに1を追加し、%04d結果を(0で埋められた4桁の10進数)形式で指定します。

1.2.10000if $verwas 生成されます1.2.9999

値を再保存するには、verを使用しますver=$( printf ... | awk ... )

答え2

perl非常に強力なテキストマニピュレーターを使用できます。

perl -pi -e 's/(^ver="\d+)\.(\d+)\.(\d+)"/"$1.$2." . sprintf("%04d", $3+1) . "\""/e' input

これにより、3つのオプションでPerlが呼び出されます。

  • -p- 入力の各行を自動的に印刷します。
  • -i- ファイルを所定の位置に編集
  • -e- 次の引数を実行するコードとして使用

このコードは、入力のすべての行で検索と置換を実行するように指示します。 「検索」部分は、次の行とのみ一致します。

  1. 最初ver="
  2. その後に1つ以上の数字が続きます(\d+「1回以上の数字と一致する」という意味)。
  3. .その後、正規表現の規則に従ってエスケープする必要があるピリオドが続きます。
  4. その後、1つ以上のピリオドではない文字が続きます。
  5. ピリオドが続く.
  6. その後、1つ以上のピリオドではない文字が続きます。
  7. その後に二重引用符が続きます。

項目#1と#2は、代替テキストとして括弧内にまとめられています$1。アイテム#4は代替テキストであり、$2アイテム#6は代替テキスト$ 3になります。ただし、所定の位置に置く前に$3値を 1 ずつ増やす書式付き印刷ステートメントを介して送信します。

交換時にPerlコードを実行する必要があるため、項目7に必要な末尾の二重引用符も再追加するe必要があります。s///

さまざまな方法でこの正規表現を強化または緩めることができます。おそらく、一致する「ver」文字列が行の唯一の文字列である必要があります。この場合、$項目#7でdoubleを使用できます。引用符の後に行アンカーがあります。

答え3

そしてbash

$ ver="1.2.0001"
$ printf -v ver '%s.%04d' "${ver%.*}" "$((${ver##*.} + 1))"
$ echo "$ver"
1.2.0002
  • ${ver%.*}1.2プレフィックスの削除サフィックスパターンを取得するために使用されます。.*
  • ${ver##*.}0001最も長いプレフィックスパターンの数字部分を削除するために使用されます。*.
  • printf -v ver ...bash操作を使用してプレフィックスプラス記号.と数字を増やし、$((... + 1))出力を変数に保存しますver

関連情報