我有一个与正则表达式有关的问题。我有一个巨大的文本文件,例如
我想得到这样的输出
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 ,因为默认情况下,在所有命令都应用到标准输出后,每行输入都会回显到标准输出。
答案 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