You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sed为Verilog模块端口行添加逗号(排除最后一行)

用sed修复Verilog实例端口的逗号格式化问题

输入文件内容

my_instance_name
(
   .port1     (port1    )
   .port2     (port2    ) // comment for port line 2
   .port3     (port3    )
   .port4     (port4    ) // comment for port line 4
);

期望输出(优先格式)

my_instance_name 
(
   .port1     (port1    ),
   .port2     (port2    ), // comment for port line 2
   .port3     (port3    ), 
   .port4     (port4    ) // comment for port line 4
);

可选替代格式(若优先格式实现复杂)

my_instance_name 
(
   .port1     (port1    )
   ,.port2     (port2    ) // comment for port line 2
   ,.port3     (port3    )
   ,.port4     (port4    ) // comment for port line 4
);

具体要求

  • 优先格式:给除最后一行外的所有端口行的右括号后添加逗号
  • 替代格式:给除第一行外的所有端口行的点号前添加逗号
  • 必须保留行尾的双斜杠注释
  • 空白仅为可读性,不影响逻辑处理
  • 最后一行端口后允许存在多个换行

当前实现的局限

目前能通过以下两行sed代码给所有端口行添加逗号,但无法排除最后一行端口:

sed -i /^\s*my_instance_name.*/,/);/{s/^\(\s*\..*)\)\(\s*\/\/.*\)/\1,\2/} my_verilog.txt
sed -i /^\s*my_instance_name.*/,/);/{s/^\(\s*\..*)\)\s*\$/\1,/} my_verilog.txt

解决方案

方案1:实现优先格式

核心思路是先给所有符合条件的端口行加逗号,再定位到实例块结尾的);,回删上一行的末尾逗号:

sed -i '
/^\s*my_instance_name/,/);/{
    # 给带注释的端口行添加逗号
    s/^\(\s*\..*)\)\(\s*\/\/.*\)/\1,\2/
    # 给不带注释的端口行添加逗号
    s/^\(\s*\..*)\)\s*$/\1,/
    # 遇到实例结尾时,修正最后一行端口的逗号
    /);/{
        x
        # 处理带注释的最后一行端口
        s/,\(\s*\/\/.*\)$/\1/
        # 处理不带注释的最后一行端口
        s/,$//
        x
    }
    # 缓存当前行到保持空间,供后续修正使用
    h
}
' my_verilog.txt

方案2:实现替代格式

这种方式逻辑更简单,只需给实例块内的非首行端口前加逗号:

sed -i '
/^\s*my_instance_name/,/);/{
    /^\s*\./{
        # 标记第一个端口行,跳过处理
        /FIRST_PORT/!{
            x
            s/^/FIRST_PORT/
            x
            b
        }
        # 非首行端口,在点号前插入逗号
        s/^\s*\./   ,&/
    }
    h
}
' my_verilog.txt

或者更简洁的版本:

sed -i '/^\s*my_instance_name/,/);/{
    /^\s*\./{N;/\n\s*\./s/\n\s*/\n   ,/;P;D}
}' my_verilog.txt

内容的提问来源于stack exchange,提问作者hskim__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:05:23