Bash 当行以某个单词开头时从文件中删除行的脚本
我有一个像下面这样的点文件Bash 当行以某个单词开头时从文件中删除行的脚本,bash,awk,sed,dot,Bash,Awk,Sed,Dot,我有一个像下面这样的点文件 .... 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);
....
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的/subgraph.*/'文件outputFile,但它只删除了包含子图的行,并给出如下结果:
30 [label="In(alloced_return_alloca[bits 0 to ..])", fillcolor="#6495ED",
shape=box];
fillcolor="#B38B4D"; style="filled"; 17;16;
};
edge [dir=back];
有什么方法可以去掉另外两条线吗?通常有多少条关联线,即从子图开始到边出现的线。还有,有没有一种方法可以将结果输出到同一个文件中,而不是写入另一个文件
谢谢。我发现sed'/subgraph/,/edge/d'inputFile这样做了。我发现sed'/subgraph/,/edge/d'inputFile这样做了。要删除由某些模式分隔的一系列行,您应该使用逗号分隔的两个地址,以选择第一行和最后一行之间的行,然后是命令: 使用-i/-in-place标志可以使用命令就地编辑文件 顺便说一句,将逻辑反转为!然后打印出所有内容,除了该范围内的行:
sed -n '/subgraph/,/edge/!p' -i file
注意:我们使用-n来禁止模式空间的自动打印,而不是使用p命令显式打印不匹配的每一行。要删除由某些模式分隔的一系列行,您应该使用逗号分隔的两个地址,以选择第一行和最后一行之间的行,然后是命令: 使用-i/-in-place标志可以使用命令就地编辑文件 顺便说一句,将逻辑反转为!然后打印出所有内容,除了该范围内的行:
sed -n '/subgraph/,/edge/!p' -i file
请注意,我们使用-n来抑制图案空间的自动打印,而不是使用p命令显式打印每一行不匹配的图案空间