![sed 将匹配的单词替换为行尾](https://linux22.com/image/105556/sed%20%E5%B0%86%E5%8C%B9%E9%85%8D%E7%9A%84%E5%8D%95%E8%AF%8D%E6%9B%BF%E6%8D%A2%E4%B8%BA%E8%A1%8C%E5%B0%BE.png)
我试图删除特定匹配模式之后的所有字符,即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]
:
- 将
\n
ewline 放在模式之后 (&
) P
rint 行位于\n
ewline之前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] 将不匹配。
但是,如果您可以确保没有多行(至少在某些情况下),那么上述内容应该可靠地工作。也没有制表符。