LINUX.ORG.RU

Замена символа(числа) в файле на число с увеличением +1

 , ,


1

1

Добрый день. Подскажите как заменить символ(число) в файле на число с увеличением +1, что-то типа:

i=0
for ((i++))
do sed -i 's/4097:0:1:[00-9]\|[00-9][00-9]:0:0:0:0:0:0:/4097:0:1:'$i':0:0:0:0:0:0:/g' file.txt
done

Что бы в файле, вместо

  • 4097:0:1:1:0:0:0:0:0:0:
  • 4097:0:1:3:0:0:0:0:0:0:
  • 4097:0:1:7:0:0:0:0:0:0:
  • 4097:0:1:5:0:0:0:0:0:0:
  • 4097:0:1:2:0:0:0:0:0:0:
  • 4097:0:1:1:0:0:0:0:0:0:
  • 4097:0:1:6:0:0:0:0:0:0:

было

  • 4097:0:1:1:0:0:0:0:0:0:
  • 4097:0:1:2:0:0:0:0:0:0:
  • 4097:0:1:3:0:0:0:0:0:0:
  • 4097:0:1:4:0:0:0:0:0:0:
  • 4097:0:1:5:0:0:0:0:0:0:
  • 4097:0:1:6:0:0:0:0:0:0:
  • 4097:0:1:7:0:0:0:0:0:0:

Заранее благодарен.



Последнее исправление: valerka6969 (всего исправлений: 1)

Я не понял вашей задачи, такое ощущение, что вам просто нужно вывести последовательность строк, а содержимое исходной строки не важно. У sed'а есть команда ″=″ — вывести номер текущей строки, может вам это поможет.

mky ★★★★★
()

Заранее

В твоем файле все строки одинаковы, за исключением одной цифры. Это специально так или нарошно?

anonymous
()
Ответ на: комментарий от mky

Это содержимое плейлиста iptv формата enigma

#SERVICE 4097:0:1:1:0:0:0:0:0:0:http%3a//........m3u

Грде 3-тя цифра 4097:0:1:1:0:0:0:0:0:0: это номер группы

4-ая 4097:0:1:1:0:0:0:0:0:0: это номер в группе.

Получилось так, что номер группы не меняется. Из-за этого все группы стали номер 1. Соответственно есть повторяющиеся номера.

  • 4097:0:1:1:0:0:0:0:0:0:http%3a//........m3u
  • 4097:0:1:2:0:0:0:0:0:0:http%3a//........m3u
  • 4097:0:1:3:0:0:0:0:0:0:http%3a//........m3u
  • 4097:0:1:1:0:0:0:0:0:0:http%3a//........m3u
  • 4097:0:1:2:0:0:0:0:0:0:http%3a//........m3u
  • 4097:0:1:3:0:0:0:0:0:0:http%3a//........m3u

Хочу преобразовать(переименовать) все номера в группе(4-тая цифра) что бы шли последовательно 1 2 3 4 5 6 7 8 9 10..... Без сортировки строк.

valerka6969
() автор топика
Ответ на: комментарий от mky

Номер строки не получится, там другие строки есть.Теги не важные. Хочу переименовать по циклу ++$i, конкретно одну цифру.

valerka6969
() автор топика
Ответ на: комментарий от valerka6969

не за что!

но, тебе уже помогли в самом первом же комментарии, и не важно на каком яп это делать - баш, питон, пых, перл...

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Последовательность строк ?))))А если в файле есть строки #DESCRIPTION #NAME ))) их тоже учитывать ? Нумерацию строк можно вывести и обычным cat Вопрос был не про нумерацию строк а про замену цифры в строке.

valerka6969
() автор топика

Как-то так можно:

awk -F: '/4097:0:1:[0-9]+:0:0:0:0:0:0:/ { $4 = ++i } {print}' file.txt > file.txt.new
mv file.txt.new file.txt
xaizek ★★★★★
()
Ответ на: комментарий от valerka6969

а я не хочу, сам пиши - тебе направление дали, нука слез с плеч и двигай культяпами самостоятельно!

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.