用正则表达式在NP ++中计算

时间:2014-03-26 10:22:54

标签: regex notepad++

我的文档有x | y |在每一行的开头,其中x,y是0到300之间的整数。例如:

  

1 | 1 |的text1

     

1 | 2 | text2的

     

1 | 3 |文字3

现在我想进行以下简单的更改:每行的每秒数应减去1.所以上面的行应该改为

  

1 | 0 |的text1

     

1 | 1 | text2的

     

1 | 2 |文字3

这可能吗?

4 个答案:

答案 0 :(得分:1)

好的,所以这里有一些有趣的事情,假设文字的格式与你指示的一样:

  • 首先进行搜索和替换,将(\d+\|(\d+)\|.*)替换为####\2\n\1。这将获取索引和输出

    1|1|text1
    ####1
    1|2|text2
    ####2
    1|3|text3
    ####3
    
  • 进行第二次搜索并替换以更新####标记后面的行的索引,替换

    ####(\d)\n(\d+\|)\d+(\|.*)
    

    \2\1\3
    

你需要手动更新第一行和最后一行,你就可以了!

由于第二列中的数字是相互跟随的,所以您需要做的就是增加它们的行。

答案 1 :(得分:1)

一种perl方式来完成这项工作:

perl -i.back -ape 's/\|(\d+)\|/"|".($1-1)."|"/e' in.txt  

将此数字直接替换为文件中的所有第二个数字减去一个(in.txt)。

此文件先于in.txt.back

保存

之前输入文件:

1|1|text1
1|2|text2
1|3|text3
2|1|text4
3|1|text5
3|2|text6

后:

1|0|text1
1|1|text2
1|2|text3
2|0|text4
3|0|text5
3|1|text6

答案 2 :(得分:0)

正则表达式不能做数学。如果文件很大,我建议您查看一个简单的python脚本或小型C ++程序来为您完成解析工作。祝你好运。

答案 3 :(得分:0)

缺少awk ??? awwwww !!

awk -F'[|]' 'NR % 2 {num = $2-1;print $1"|"num"|"$3}' text.txt

其中text.txt是包含您的内容的文件。 您可以使用>运算符

将输出写入文件 像这样

awk -F'[|]' 'NR % 2 {num = $2-1;print $1"|"num"|"$3}' text.txt > final.txt