正規表現の算術演算

正規表現の算術演算

私はgedit正規表現プラグイン(Pythonスタイルの正規表現)を使用しています。一連の逆参照について算術演算を実行したいと思います。

たとえば、

PART 1 DATA MODELS Chapter  
2 Entity-Relationship Model 27

に変えたい

PART 1 DATA MODELS Chapter  25
2 Entity-Relationship Model 27

私の正規表現は^(PART.*)\n(.*\s(\d+))\nであり、これをに変更したいと思います\1 \3-2\n\2\n。しかし、代替正規表現は正しくありません。

答え1

今はgeditには興味がありませんが、vim正規表現の算術は簡単です。たとえば、

:%s/\d\+/\=submatch(0)+25/g

各整数を見つけて25を追加します。

また見てくださいここ同様の問題に対するPerlソリューション。

答え2

私の理解は、各行の最後に'PART'次の行の最後の数字から2を引いた値を追加したいということです。そうであれば、以下を実行できます'awk'

awk '!/^PART/{print}/^PART/{
getline next_line;
match(next_line, "[^ ]*$");
print $0 " " substr(next_line, RSTART) - 2;
print next_line}' <your file>

'PART'このスクリプトは、入力ファイルの最後の行がで始まらず、で始まる行の後の行の'PART'末尾にスペースと数字が含まれると仮定して実行されます。必要に応じてエラーチェックを追加できます。

関連情報