使用 sed 删除文件中最后一次出现的条目

使用 sed 删除文件中最后一次出现的条目

我想使用 sed 命令删除文件中最后一次出现的“(* cds_ams_schematic *)”。

`view schematic

`timescale 1ns / 1ns 
(* cds_ams_schematic *)

module ...

endmodule

// LAST TIME SAVED: Sep  9 12:14:07 2022
// NETLIST TIME: Dec 13 09:13:34 2022

`view schematic

`timescale 1ns / 1ns 
(* cds_ams_schematic *)

module ...
inout  N, P, sub;


endmodule

// LAST TIME SAVED: Oct 10 14:16:33 2022
// NETLIST TIME: Dec 13 09:13:34 2022

`view schematic

`timescale 1ns / 1ns 
(* cds_ams_schematic *)

module ...
inout  PAD;

endmodule
    
`view schematic_incisiv

`timescale 1ns / 1ns 
(* cds_ams_schematic *)

`noworklib
`noview

我尝试了命令

sed -rn 's/[(][*]\scds_ams_schematic\s[*][)]//' sample_txt_file.txt

但是它不起作用。有什么想法吗?

答案1

您可以尝试此命令(参考

tac input.txt | awk '!found && /(\* cds_ams_schematic \*)/{found=1;next}1' | tac > output.txt

答案2

GNUsed可以-z选择使用 NULL 字符而不是 LF 作为分隔符,因此对于文本文件(没有 NULL),整个文件将被处理为一行,并且您可以使用贪婪来.*查找文件中的最后一次出现:

sed -z 's/\(.*\)(\* cds_ams_schematic \*)/\1/' yourfile.txt

对于大型文件来说这不是一个好主意,但对于像您的示例这样的文件来说则没有问题。

相关内容