sed 将匹配的单词替换为行尾

sed 将匹配的单词替换为行尾

我试图删除特定匹配模式之后的所有字符,即nfin到行尾。

示例文本

xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2 pdej=1.6e-07 asej=3.2e-16 lrsd=4e-08 pre_layout_local=0 

命令

sed -i "s/nfin\=[0-9].*//g" sample_text

所需输出

xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2  

答案1

试试这个sed

sed -E 's/ pdej.*$//'

例子:

sed -E 's/ pdej.*$//' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2

其中file.txt包含:

cat file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2 pdej=1.6e-07 asej=3.2e-16 lrsd=4e-08 pre_layout_local=0


或者:
如果您想(需要)用作nfin某种锚点,请使用:

sed -E 's/(.*nfin=[0-9]).*/\1/' file.txt 
xxsac00mi126 vddai:f1042 tkeept_iph xsac00.f1040 vdda lvtpfet m=1 nf=1 nfin=2

答案2

sed -i "/nfin=[0-9]/{s//&\n/;P;d;}" sample_text

nfin=[0-9]
将删除For line(s) with后的其余行nfin=[0-9]

  • \newline 放在模式之后 ( &)
  • Print 行位于\newline之前
  • d删除行(不再打印)

答案3

sed -ne 's/[ ]nfin=[^ ]*/&\n/;P' < your_spice_netlist

但你必须记住,spice 网表可以有实例('x'),或者任何元素跨线边界,在这种情况下,上面的 sed 代码可能不起作用,因为 nfin 参数可能位于一行,如 +nfin=23。另外,有时“nfin”可能会出现参数化,例如,nfin='width*0.5 + 1./nfac*len',因此nfin=[0-9] 将不匹配。

但是,如果您可以确保没有多行(至少在某些情况下),那么上述内容应该可靠地工作。也没有制表符。

相关内容