我必须在类声明之前添加编译器指令,如:
`ifndef MIPI_RFFE_SCOREBOARD__SV
`define MIPI_RFFE_SCOREBOARD__SV
class mipi_rffe_scoreboard extends uvm_scoreboard;
我试过了:
sed 's/class (\w+)(.*)/\`ifndef \U\1__SV\2/' mipi_rffe_scoreboard.sv
给出了:
sed: -e expression #1, char 38: invalid reference \2 on `s' command's RHS
我见过Using sed, Insert a line below (or above) the pattern?。在这里,Kamal的答案仅解决了我需要捕获的部分问题" mipi_rffe_scoreboard"并将其更改为大写
答案 0 :(得分:1)
您可以在文件中运行此perl单行程序:
perl -pe 's/(class (\w+))/`ifndef \U$2\E__SV\n`define \U$2\E__SV\n\n$1/'
它捕获包含" class"的行。接着是一个单词,并在前面加上两行。 \U
用于将匹配转换为大写,\E
用于转换转换。
测试出来:
$ perl -pe 's/(class (\w+))/`ifndef \U$2\E__SV\n`define \U$2\E__SV\n\n$1/' <<<"class mipi_rffe_scoreboard extends uvm_scoreboard;"
`ifndef MIPI_RFFE_SCOREBOARD__SV
`define MIPI_RFFE_SCOREBOARD__SV
class mipi_rffe_scoreboard extends uvm_scoreboard;
或者(在GNU sed上测试,我相当确信这不会在其他版本上运行):
sed -r 's/class (\w+)/`ifndef \U\1\E__SV\n`define \U\1\E__SV\n\n&/'
-r
启用扩展正则表达式模式,允许您使用( )
捕获模式。通常,您必须使用\( \)
转义它们。