在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3042|回复: 8

[求助] 如何在匹配行的末尾添加东西?

[复制链接]
发表于 2015-1-21 13:53:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
举个简单的例子,如下是一个文本,如何自动匹配.SUBCKT这一行,并在这行的末尾添加 VDD VSS呢?.SUBCKT inv0d0 ZN I
M1      ZN      I       VDD     VDD     pmos_3p3 L=0.35U  W=2.00U
M2      ZN      I       VSS     VSS     nmos_3p3 L=0.35U  W=1.50U
.ENDS inv0d0


上面的例子很简单,自己手动添加到无妨,其实我要处理的文本很大,有.SUBCKT的行很多,想自动匹配这样的行,并在行尾添加VDD VSS,
如何才能做到呢?

本人新手,对VIM和sed的用法不太了解,希望高手帮忙解答一下,谢谢啦!
发表于 2015-1-21 17:16:39 | 显示全部楼层
回复 1# 美国


#!/usr/bin/env tclsh
set f [open [lindex $argv 0] r]
set pat {(^.SUBCKT(\s+\S+)+)}
set need {\1 VDD VSS}
while {[gets $f line] >=0} {
       regsub -- $pat $line $need line
       puts $line
}
Usage: script YourFile
刚刚学习tcl不久,感觉有点复杂,不过应该能得到你要的结果
发表于 2015-1-24 02:11:20 | 显示全部楼层
Perl下用这个reg expr应该可以
s/(^.SUBKIT.+$)/$1 VSS VDD/g
发表于 2015-1-27 13:40:08 | 显示全部楼层
perl下: 我喜欢逐行操作

while (<>) {
    if ( /^subckt/i ) {
        s/$/ VDD VSS /
    }
    print ;
}
 楼主| 发表于 2015-1-28 20:47:26 | 显示全部楼层
回复 4# icfbicfb

谢谢。学习学习
发表于 2015-4-24 10:13:41 | 显示全部楼层
:g/SUBCKT/s/$/ VDD VDD/g
发表于 2016-6-29 20:16:16 | 显示全部楼层
在shell里面应该可以这么用:
grep ".SUBCKT" filename | sed "s/$/ VDD VSS /g"
初学者
发表于 2021-7-2 18:02:51 | 显示全部楼层
事情似乎并不是这么简单,在以下情况中该如何用脚本实现呢?

...
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
DD0 GND ...
.ENDS
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
DD0 GND ...
.ENDS
...

在spice网表中有可能一行写不开会另起一行用+表示,此时如果想在.SUBCKT行后加VDD VSS则需要在最后一个+后的行后添加,那么整个文档.SUBCKT可能会有10几个+,或者一个+也没有,此时应该怎么处理?


处理后的内容应该如下:
...
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14] VDD VSS
DD0 GND ...
.ENDS
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14] VDD VSS
DD0 GND ...
.ENDS
...
发表于 2021-7-2 18:03:40 | 显示全部楼层
事情似乎并不是这么简单,在以下情况中该如何用脚本实现呢?

...
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
DD0 GND ...
.ENDS
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
DD0 GND ...
.ENDS
...

在spice网表中有可能一行写不开会另起一行用+表示,此时如果想在.SUBCKT行后加VDD VSS则需要在最后一个+后的行后添加,那么整个文档.SUBCKT可能会有10几个+,或者一个+也没有,此时应该怎么处理?


处理后的内容应该如下:
...
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14] VDD VSS
DD0 GND ...
.ENDS
.SUBCKT PORT[1] PORT[2] PORT[3] PORT[4]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14]
+ PORT[5] PORT[6] PORT[7] PORT[8] PORT[9]
+ PORT[10] PORT[11] PORT[12] PORT[13] PORT[14] VDD VSS
DD0 GND ...
.ENDS
...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-18 10:32 , Processed in 0.536533 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表