在文件中查找字符串并部分执行数学运算

时间:2018-12-03 06:04:37

标签: regex awk sed

我正在尝试在文件中查找字符串,当我发现该字符串时,请将其分解并对其一部分进行数学运算。听起来sed无效,因为我想做数学,awk却很困难,因为我想就地更新文件。

我的文件如下所示(是svn差异)

Index: code/foo.c
===================================================================
--- code/foo.c  (revision 13)
+++ code/foo.c  (working copy)
@@ -3,5 +3,5 @@
 int main(int argc, char *argv[])
 {
     printf("I don't like being moved around!\n%s", bar());
-    return 0;
+    return 1;
 }

我正在寻找@@行,并想在结尾@@之前的最后一个数字前加1。因此,@@ -3,5 +3,5 @@将变成@@ -3,5 +3,6 @@

2 个答案:

答案 0 :(得分:4)

请您尝试以下。

awk '
BEGIN{
  FS=OFS=","
}
/^@@.*@@/{
  split($NF,array," ")
  $NF=array[1]+1" " array[2]
}
1
'   Input_file

如果您要将输出保存到Input_file中,请在上述代码中附加> temp_file && mv temp_file Input_file

注意: :如果您使用的是GNU awk> = 4.1.0的确也包含-i inplace

答案 1 :(得分:0)

使用GNU awk将第三个参数匹配():

$ awk 'match($0,/^(@@.*,)([0-9]+)( @@)$/,a){$0=a[1] a[2]+1 a[3]} 1' file
Index: code/foo.c
===================================================================
--- code/foo.c  (revision 13)
+++ code/foo.c  (working copy)
@@ -3,5 +3,6 @@
 int main(int argc, char *argv[])
 {
     printf("I don't like being moved around!\n%s", bar());
-    return 0;
+    return 1;
 }