我的文档有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
这可能吗?
答案 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