如何找到特定字符串的正则表达式

时间:2019-01-15 04:43:48

标签: bash awk

我有一个与正则表达式有关的问题。我有一个巨大的文本文件,例如

我想得到这样的输出

 ID           DE
1.1      Transformer
1.12     Best bye
1.1.1    Iphone

所以基本上我想获取ID和DE

我尝试过使用awk和sed,但没有成功。我以为我得到了ID,然后得到了DE,然后合并了它们,但是我仍然不知道该怎么做

sed -n ID my.txt

我使用了 -n ,因为默认情况下,在所有命令都应用到标准输出后,每行输入都会回显到标准输出。

2 个答案:

答案 0 :(得分:2)

编辑: 如OP所述,如果任意 private static char[] alphabet = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; private static StringBuilder partialSolution = new StringBuilder(); private static File fout = new File("out.txt"); private static FileOutputStream fos; private static BufferedWriter bw; static { try { fos = new FileOutputStream(fout); bw = new BufferedWriter(new OutputStreamWriter(fos)); } catch (IOException e) { e.printStackTrace(); } } 中的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

答案 1 :(得分:0)

快速又脏的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

作为内容的单行纸

sed '/^[[:blank:]]*ID[[:blank:]]\{1,\}/{s///;h;d;};/^[[:blank:]]*DE[:blank:]]\{1,\}/{s///;H;x;s/\n/\t/p;};d' YourFile