如何替换某些字符串?

如何替换某些字符串?

我的文本文件示例:

03/Oct/2016:06:39:50-0500,cd/base/0/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/1/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/2/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/3/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/4/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/5/46/8.png,200,7208
...

在本文中,我必须按照base/以下规则替换数字:

if that_number=0 then that_number=5
if that_number=1 then that_number=6
if that_number=2 then that_number=7
if that_number=3 then that_number=8
if that_number=4 then that_number=9
if that_number=5 then that_number=10

想要的结果:

03/Oct/2016:06:39:50-0500,cd/base/5/48/2.png,206,1514
03/Oct/2016:06:39:50-0500,cd/base/6/46/3.png,206,5796
03/Oct/2016:06:39:50-0500,cd/base/7/45/4.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/8/46/78.png,200,7208
03/Oct/2016:06:39:50-0500,cd/base/9/45/43.png,206,2252
03/Oct/2016:06:39:50-0500,cd/base/10/46/8.png,200,7208

知道我该怎么做吗?

答案1

在 Perl 中,很容易匹配上下文做加法:

perl -pe 's,base/\K\d+,$& + 5,e' input_file

我们匹配 形式的任何内容,忘记第一部分(直到),并将其余部分替换为匹配的内容 ( ) 加 5。使替换成为 Perl 表达式而不仅仅是字符串。base/<numbers>\K$&e

答案2

awk可以利用它对+5每个数字进行操作的事实:

awk -F'/' '{$5+=5 ; print}' OFS='/' input_file

当分别用作输入 ( ) 和输出 ( )/的字段分隔符时,需要将 5 添加到字段编号 5。-F'/'OFS='/')

请注意,斜杠的位置和数字在这里至关重要。

答案3

sed会工作:

sed \
    -e 's/base\/1/base\/6/' \
    -e 's/base\/2/base\/7/' \
    -e 's/base\/3/base\/8/' \
    -e 's/base\/4/base\/9/' \
    -e 's/base\/5/base\/10/' \
    -e 's/base\/0/base\/5/'

我认为你必须将“base/0”案例放在最后,否则,5 -> 10 案例也会启动。

相关内容