我正在使用 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'
在末尾包含一个空格和一个数字。如果需要,可以添加错误检查。