сопоставление и добавление на основе позиции символа

Вместо сложной подстановки sed вы можете просто использовать поиск с фиксированной строкой grep и вырезать :

$ grep -F 'processes' file | cut -d ' ' -f 3
1
16.03.2017, 01:19
3 ответа

Предполагая, что вы хотите делать это на каждой строке ввода и что смещение должно быть основано на 1 и выражаться в количестве символов, а не в количестве байт, POSIXly:

sed '
  s/^.\{585\}5.\{27\}/&0/;t
  s/^.\{585\}1.\{28\}/&0/'

Or:

awk 'length >= 613 && substr($0, 586, 1) == "5" {
       $0 = substr($0, 1, 613) "0" substr($0, 614)
       next
     }
     length >= 614 && substr($0, 586, 1) == "1" {
       $0 = substr($0, 1, 614) "0" substr($0, 615)
     }
     {print}'
1
27.01.2020, 23:24
perl -i -pe '
   m/^.{585}\K5/ && s/.{613}\K/0/;
   m/^.{585}\K1/ && s/.{614}\K/0/;
' inoutfile
0
27.01.2020, 23:24

Может быть вариант с awk ( не тестировалось):

$ awk 'BEGIN{FS=OFS=""}$586==5{$614="0" $614}$586==1{$615="0" $615}1' inputfile >newfile
$ mv newfile inputfile

При установке FS="" разделителем awk является символ.

2
27.01.2020, 23:24

Теги

Похожие вопросы