Как заменить определенные струны?

Как заменить определенные струны?

Пример моего текстового файла:

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

При использовании /в качестве разделителя полей для ввода ( -F'/') и вывода ( OFS='/'), соответственно, к полю номер 5 необходимо добавить 5.

Обратите внимание, что здесь решающее значение имеют положение и количество косых черт.

решение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/'

Я думаю, что случай «база/0» нужно поставить последним, в противном случае вступит в силу и случай 5 -> 10.

Связанный контент