如何将三角括号拆分为几个?

我的文件包含此

abc = <0x0 0x1>;
abc = <0x0 0x1 0x2>;
def = <0x0123 0x4567 0x89AB 0xCDEF>;
def = <0x0 0x1>;
def = <0x1 0x2 0x3 0x4>;
abc = <0x0 0x2 0x4 0x6>;
def = <0x0 0x1 0x2 0x3 0x4 0x5>;

我需要将其转换为

abc = <0x0 0x1>;
abc = <0x0 0x1 0x2>;
def = <0x0123 0x4567>,<0x89AB 0xCDEF>;
def = <0x0 0x1>;
def = <0x1 0x2>,<0x3 0x4>;
abc = <0x0 0x2 0x4 0x6>;
def = <0x0 0x1 0x2 0x3 0x4 0x5>;

我只需要将三角括号之间的4个十六进制数字分割成两对括号,并用逗号隔开,里面有2个十六进制数字,并且只在以'def ='(或'def ='之前的任何符号)。如何使用sed,awk或grep做到这一点?

love1033360299 回答:如何将三角括号拆分为几个?

请您尝试以下。

awk '
/def/ && match($0,/<.*>/){
  val=substr($0,RSTART,RLENGTH)
  num=split(val,array," ")
  if(num==4){
    val=array[1] OFS array[2]">,<" array[3] OFS array[4]
  }
  $0=substr($0,1,RSTART-1) val substr($0,RSTART+RLENGTH)
}
1
' Input_file

如果要将输出保存到Input_file本身,请在上面的代码中附加> temp && mv temp Input_file

,

这可能对您有用(GNU sed):

sed -E '/^ *def =/s/(<\S+ \S+) (\S+ \S+>;)$/\1>,<\2/' file

如果一行以def =开头并且在<>之间包含4个字段,请在这些字段的第2个和第3个之间插入>,<

本文链接:https://www.f2er.com/3149720.html

大家都在问