我有一个像下面这样的点文件。
....
29 [label="OutRet", fillcolor="#90EE90", shape=box];
30 [label="In(alloced_return_alloca[bits 0 to ..])", fillcolor="#6495ED",
shape=box];
subgraph cluster_Call4 { label="Call4 : f = (int *)alloca(sizeof(*f) * __lengthof_f);";
fillcolor="#B38B4D"; style="filled"; 17;16;
};
edge [dir=back];
7 -> 6 [color="#000000", style="dotted"];
....
每当有子图属性时,我想删除该属性。在某些文件中可能有多个sugraph属性,在这种情况下我想删除所有这些属性。我尝试使用sed '/subgraph/ d' inputfile > outputFile
和sed -i 's/subgraph.*//'
文件outputFile但它只删除包含子图的行并给出如下结果:
30 [label="In(alloced_return_alloca[bits 0 to ..])", fillcolor="#6495ED",
shape=box];
fillcolor="#B38B4D"; style="filled"; 17;16;
};
edge [dir=back];
有没有办法我可以删除其他两条线(通常有多少相关线),即从子图开始直到" edge"出现的线。另外,有没有办法可以将结果输出到同一个文件中,而不是将其写入另一个文件中?
由于
答案 0 :(得分:1)
我发现sed '/subgraph/,/edge/d' inputFile
这是有效的。
答案 1 :(得分:1)
要删除由某些模式分隔的一系列行,您应该使用address range(两个地址用逗号,
分隔)和regexp addresses来选择之间的行(包括第一个和最后一个),然后是delete命令:
sed '/subgraph/,/edge/d' -i file
使用-i
/ --in-place
标记修改file
到位(使用optional backup)。
顺便说一句,通过反转逻辑(使用!
)并打印出所有内容,除了该范围内的行外,获得了相同的结果:
sed -n '/subgraph/,/edge/!p' -i file
注意我们使用-n
来禁止自动打印模式空间,而是使用p
命令显式打印它,每行不匹配。