как найти регулярное выражение конкретной строки - PullRequest
0 голосов
/ 15 января 2019

У меня есть вопрос, связанный с регулярным выражением. У меня есть огромный текстовый файл, как

Я хочу получить такой вывод

 ID           DE
1.1      Transformer
1.12     Best bye
1.1.1    Iphone

так что в основном я хочу получить ID и DE

я пытался использовать awk и sed, но безуспешно. Я думал, что получу удостоверение личности, затем получу DE, а затем объединю их, но я все еще не мог понять, как это сделать

sed -n ID my.txt

Я использовал -n , потому что по умолчанию каждая строка ввода выводится на стандартный вывод после того, как все команды были применены к нему.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Быстрая и грязная версия sed

sed '1 i\
ID DE
   # catch ID info in buffer
   /^[[:blank:]]*ID[[:blank:]]\{1,\}/{
      s///
      h
      d
      }
    # catch DE info in buffer
    /^[[:blank:]]*DE[:blank:]]\{1,\}/{
      s///
      H
      # reformat both info from buffer and print
      x
      s/\n/\t/p
      }
    # avoid any other print
    d
    ' YourFile

как oneliner для контента

sed '/^[[:blank:]]*ID[[:blank:]]\{1,\}/{s///;h;d;};/^[[:blank:]]*DE[:blank:]]\{1,\}/{s///;H;x;s/\n/\t/p;};d' YourFile
0 голосов
/ 15 января 2019

РЕДАКТИРОВАТЬ: Как указано в OP, если любой de пуст с соответствующими id, затем напечатайте дефис, затем попробуйте выполнить следующее.

awk '
BEGIN{
  OFS="\t"
  print "ID\t\tDE"
}
/ID/{
  if(id){
    print id,de?de:"-"
    id=de=""
  }
  id=$2
  next
}
/DE/{
  $1=""
  sub(/^ +/,"")
  de=$0
}
END{
  if(id){
    print id,de?de:"-"
  }
}'  Input_file


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

awk '
BEGIN{
  OFS="\t"
  print "ID\t\tDE"
}
/ID/{
  if(id){
    print id,de
    id=de=""
  }
  id=$2
  next
}
/DE/{
  $1=""
  sub(/^ +/,"")
  de=$0
}
END{
  if(id){
    print id,de
  }
}'   Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...