如何使用 sed 和 xargs 删除空的 Verilog 模块?
How can I delete empty Verilog modules, using sed and xargs?
我的 Verilog 文件(自动写入)中有空模块,我想在写入文件时将其删除。
例如
module noneed ;
endmodule
我的计划是找到这些行并将它们从我的文件中删除,所以我想出了这个(非工作)管道:
grep -P -A 1 -n 'module \S+ \;' myfile.v \
| perl -p -e 's/(\d+).*//' \
| 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 ;
在@Sundeep 的帮助下,我想到了这条超级快的线路。
sed -i -re '/module \S+ ;/,+1d' myfile.v
谢谢
sed -e '/\bmodule[^(]*$/,/endmodule/d' myfile.v
对于任何有单词边界 + module
且没有左括号的行,删除直到 endmodule。
有效删除没有引脚的模块,用于格式化 Verilog 的典型方法。
一个可靠的解决方案是使用分号作为行分隔符。
也就是说,这是 /START/,/END/{ ... }
我们在 sed 中使用的很多编辑网表的语法:
sed \
-e '/\.SUBCKT DELETEME\b/,/\.ENDS/d' \
-e '/module DELETETHISTOO\b/,/endmodule/d' \
input-file > output-file
... 因为即使 spice 可以有续行并且 verilog 可以有任意换行符直到分号,大多数网表工具可以被告知避免那些更困难的情况。
我的 Verilog 文件(自动写入)中有空模块,我想在写入文件时将其删除。
例如
module noneed ;
endmodule
我的计划是找到这些行并将它们从我的文件中删除,所以我想出了这个(非工作)管道:
grep -P -A 1 -n 'module \S+ \;' myfile.v \
| perl -p -e 's/(\d+).*//' \
| 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 ;
在@Sundeep 的帮助下,我想到了这条超级快的线路。
sed -i -re '/module \S+ ;/,+1d' myfile.v
谢谢
sed -e '/\bmodule[^(]*$/,/endmodule/d' myfile.v
对于任何有单词边界 + module
且没有左括号的行,删除直到 endmodule。
有效删除没有引脚的模块,用于格式化 Verilog 的典型方法。
一个可靠的解决方案是使用分号作为行分隔符。
也就是说,这是 /START/,/END/{ ... }
我们在 sed 中使用的很多编辑网表的语法:
sed \
-e '/\.SUBCKT DELETEME\b/,/\.ENDS/d' \
-e '/module DELETETHISTOO\b/,/endmodule/d' \
input-file > output-file
... 因为即使 spice 可以有续行并且 verilog 可以有任意换行符直到分号,大多数网表工具可以被告知避免那些更困难的情况。