Bash 如何使用sed/awk在十六进制数之间添加零?

Bash 如何使用sed/awk在十六进制数之间添加零?,bash,awk,sed,Bash,Awk,Sed,我有一个包含字符串的文件 abc = <0x12345678>; abc = <0x01234 0x56789>; abc = <0x123 0x456 0x789>; abc = <0x0 0x01234 0x0 0x56789>; abc = <0x012 0x345>, <0x678 0x901>; def = <0x12345 0x67890>; abc=

我有一个包含字符串的文件

    abc = <0x12345678>;
    abc = <0x01234 0x56789>;
    abc = <0x123 0x456 0x789>;
    abc = <0x0 0x01234 0x0 0x56789>;
    abc = <0x012 0x345>, <0x678 0x901>;
    def = <0x12345 0x67890>;
abc=;
abc=;
abc=;
abc=;
abc=;
def=;
我需要将其转换为包含的文件

    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=;
abc=;
abc=;
abc=;
abc=;
def=;
因此,如果字符串以“abc=”开头,我需要在十六进制数之前加上零,这两个三角括号之间的十六进制数不超过2个,并且十六进制数之间没有0x0。如何使用sed、awk或其他bash工具完成此任务?

sed'/abc=]*/!s/0x/0&/g}'
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
/abc=]*/!s/0x/0&/g}
/abc=]*/Match,如果行在后面包含两个以上的元素<
s/0x/0&/Prepend“0”到“0x”
g全球范围内,即尽可能多次更换

文件是否可以包含类似于
abc=?(具有不同十六进制数的组)仅具有相同十六进制数的组该十六进制数之间不存在0x0的条件已包含在先前规则中,两个三角形之间的十六进制数不超过2个brackets@CasimiretHippolyte:前导空格。行
abc=
可能吗?几乎成功了<代码>sed'/abc=]*/!s/0x/0&/g};s/abc=