Как разделить треугольные скобки на пару из них? - PullRequest
0 голосов
/ 06 ноября 2019

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

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-мя номерами HEX между ними на пару скобок, разделенные запятой, с двумя HEX-числами внутри и только в строках, начинающихся с 'def =' (или 'def =' с любыми символами перед его). Как я могу сделать это с помощью sed, awk или grep?

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Не могли бы вы попробовать следующее.

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 в приведенный выше код.

0 голосов
/ 07 ноября 2019

Это может работать для вас (GNU sed):

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

Если строка начинается с def = и содержит 4 поля между < и >, вставьте >, < между 2-м и3 из этих полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...