我的Verilog文件中有空模块(自动写入),我想在写入文件时将其删除 e.g。
module noneed ;
endmodule
我的计划是找到这些行并将其从我的文件中删除,所以我想出了这个(非工作)管道:
grep -P -A 1 -n 'module \S+ \;' myfile.v \
| perl -p -e 's/(\d+).*/$1/' \
| grep -v '-' \
| xargs -0 -i sed '{}d' myfile.v
我的专栏:找到空模块,记下他们的行号(以及后面的行)并将其提供给sed
以便删除。
我在这里做错了什么?我如何修理我的单线以实际删除线?
顺便说一句,
xargs
很酷,但是我并不关心不使用它的解决方案。
修改
这是测试文本:
buf syn_1 ( .a ( clkin ) , .vcc ( vcc ) , .vss ( vss ) ) ;
endmodule
module some_bu11shit_module_nobody_needs_234 ;
endmodule
module a_real_module ( clk , inputs , vcc , vss ) ;
input clk ;
EDIT2
期望的输出:
buf syn_1 ( .a ( clkin ) , .vcc ( vcc ) , .vss ( vss ) ) ;
endmodule
module a_real_module ( clk , inputs , vcc , vss ) ;
input clk ;
答案 0 :(得分:1)
sed -e '/\bmodule[^(]*$/,/endmodule/d' myfile.v
对于任何带有单词边界+ module
并且没有打开的parens的行,请删除直到endmodule。
有效删除没有引脚的模块,用于格式化Verilog的典型方法。
强大的解决方案将使用分号作为行分隔符。
那就是说,这是我们使用的/START/,/END/{ ... }
语法,有很多编辑网表:
sed \
-e '/\.SUBCKT DELETEME\b/,/\.ENDS/d' \
-e '/module DELETETHISTOO\b/,/endmodule/d' \
input-file > output-file
...因为即使spice可以有行连续,并且verilog可以在分号之前有任意换行符,但大多数网表工具都可以被告知避免那些更困难的情况。
答案 1 :(得分:0)
在@Sundeep的帮助下,我想出了这条超快速的线。
sed -i -re '/module \S+ ;/,+1d' myfile.v
由于