Как добавить нули между шестнадцатеричными числами с помощью sed / awk? - PullRequest
0 голосов
/ 27 октября 2019

У меня есть файл, содержащий строки

    abc = <0x12345678>;
    abc = <0x01234 0x56789>;
    abc = <0x123 0x456 0x789>;
    abc = <0x0 0x01234 0x0 0x56789>;
    abc = <0x012 0x345>, <0x678 0x901>;
    def = <0x12345 0x67890>;

Мне нужно преобразовать его в файл, содержащий

    abc = <0 0x12345678>;
    abc = <0 0x01234 0 0x56789>;
    abc = <0x123 0x456 0x789>;
    abc = <0x0 0x01234 0x0 0x56789>;
    abc = <0 0x012 0 0x345>, <0 0x678 0 0x901>;
    def = <0x12345 0x67890>;

Поэтому мне нужно добавить нули перед шестнадцатеричными числами, если строки начинаются с 'abc =' , это не более 2 шестнадцатеричных чисел между парой треугольных скобок, и между этими шестнадцатеричными числами нет 0x0 . Как я могу сделать это с помощью sed , awk или других инструментов bash?

1 Ответ

0 голосов
/ 27 октября 2019
sed '/abc = </{/<[^ >]* [^ >]* /!s/0x/0 &/g}'

Объяснение:

/abc = </{/<[^ >]* [^ >]* /!s/0x/0 &/g}
/abc = </                                Operate on lines containing "abc = <"
         {                            }  Group the commands together
                           !             Negate the condition
          /<[^ >]* [^ >]* /              Match if lines contain more than two elements after <
                            s/0x/0 &/    Prepend "0 " to "0x"
                                     g   Globally, i.e. replace as many times as possible
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...