
私は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'
末尾にスペースと数字が含まれると仮定して実行されます。必要に応じてエラーチェックを追加できます。