LINUX.ORG.RU

Автоматизация с помощью sed в bash

 ,


0

1

у меня есть множество чисел по виду «xxxxxxYxYYYYYYYYYYgY» где x-не нужные числа, где g-не нужная буква, а Y-нужные числа. На примере 989907510653028203F0 ; 989907510653028262F0 примерно такие числа во всех таких числах не различается x и g, но различаются Y. мне нужно привести допустим число 989907510653028203F0 к виду 56035202826 0 пока что я нашел команду Sim=«989907510653028262F0» echo «$Sim» | while read -n2 C ; do echo -n «${C:1}${C::1}» ; done ; echo и выдает она 8999701560352028260F. Я немного поменял ее на echo «${Sim:6:15}» | while read -n2 C ; do echo -n «${C:1}${C::1}» ; done ; echo а она выдает 1560352028260F. Из-за того что Y всегда разные и их большое множество нельзя написать удалить первую 1 и f и поставить пробел после 6



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

Вы бы определились у вас «xxxxxYxYYYYYYYYYYgY» 19 цифр, а в 989907510653028262F0 - 20, в результирующих непонятно, куда девать первую Y. А вообще если одним действием тупо, то так:

#!/bin/bash
[[ "$l" =~ ......(.).(.)(.)(.)(.)(.)(.)(.)(.)(.)(.).(.) ]] && \
        echo "${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[5]}\
${BASH_REMATCH[4]}${BASH_REMATCH[7]}${BASH_REMATCH[6]}\
${BASH_REMATCH[9]}${BASH_REMATCH[8]}${BASH_REMATCH[11]}${BASH_REMATCH[10]} ${BASH_REMATCH[12]}"
Для l='989907510653028262F0' результат будет '6035202826 0', а уж дальше вы свою маску рисуйте, ибо сделал как примерно соотвествует вашим противоречивым примерам.

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

В xxxxxYxYYYYYYYYYYgY серьезно лопухнулся там должно быть xxxxxxYxYYYYYYYYYYgY не 19 а 20. С редактированием текста у меня огромные проблемы и если вам будет не сложно можете объяснить как сделать чтобы он выводил с первым Y в данном случае «5» и в итоге получалось 56035202826 0

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

я извиняюсь

Зачем ты извиняешься, но при этом не ответил ни на один вопрос по сути твоей темы?

Правильный ответ звучит так

$ HOBIbYKOD=${Sim:6:1}${Sim:9:1}${Sim:8:1}${Sim:11:1}${Sim:10:1}${Sim:13:1}${Sim:12:1}${Sim:15:1}${Sim:14:1}${Sim:17:1}${Sim:16:1}\ ${Sim:19:1}
$ echo -e ${Sim}"\n"$HOBIbYKOD
989907510653028262F0
56035202826 0

justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 1)
Ответ на: комментарий от justAmoment

Не могли ли вы сказать что нужно чтобы он выводил только измененный код? И да вирусы на андроид точно не смогу написать маловат еще

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

Так я вроде бы уже сам разобрался огромное вам спасибо

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

С редактированием текста у меня огромные проблемы

Если не понятно, то лучше и не использовать.

как сделать чтобы он выводил с первым Y в данном случае «5» и в итоге получалось 56035202826 0

Ведь явно же тогда вам надо просто добавить вначале ${BASH_REMATCH[1]}

vodz ★★★★★
()
Ответ на: комментарий от justAmoment

echo -e ${Sim}«\n»$HOBIbYKOD

Плохому учите. Мало ли чего у него в sim? И маски развернутся и -e может чего странного сделать. В одном месте ${var}, а потом сразу же $var ... Раз уж юзаем башизмы с ${var:off:l}, то:

echo "$Sim"$'\n'"$HOBIbYKOD"

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.