我已附加一个 .cfg 文件。
BK = 2
CM = 2
LEF_M1_NAME = "ME1"
LEF_M2_NAME = "ME2"
LEF_M3_NAME = "ME3"
LEF_M4_NAME = "ME4"
LEF_M5_NAME = "ME5"
NB = 144
NW = 256
viewselect = {
"alf"
"allpvt"
"allpvthtml"
"atpg_netlist"
"clp"
"coord"
"core"
"cpf"
"ctl"
"dssum"
"fast_func_verilog"
"fastscan"
"frontend_gds"
"gds"
"ikos"
"lvlib"
"masis"
"verilog_vhd_stim"
"chd_rtl"
}
component $c set_parameter
现在,我必须在 Linux 中使用命令在每行的开头添加行sed
,除了开头有一个空格,例如alf
,allpvt
开头有空格,而且我不想component $c set_parameter
在那里添加行。有人可以帮助我了解sed
命令语法吗?
我使用了以下sed
命令来打印component $c set_parameter
所有行。
sed -i -e 's/^/ component $c set_parameter /' a.cfg
命令的输出如下
component $c set_parameter BK 2
component $c set_parameter CM 2
component $c set_parameter LEF_M1_NAME ME1
component $c set_parameter LEF_M2_NAME ME2
component $c set_parameter LEF_M3_NAME ME3
component $c set_parameter LEF_M4_NAME ME4
component $c set_parameter LEF_M5_NAME ME5
component $c set_parameter NB 144
component $c set_parameter NW 256
component $c set_parameter viewselect = {
component $c set_parameter alf
component $c set_parameter allpvt
component $c set_parameter allpvthtml
component $c set_parameter atpg_netlist
component $c set_parameter clp
component $c set_parameter coord
component $c set_parameter core
component $c set_parameter cpf
component $c set_parameter ctl
component $c set_parameter dssum
component $c set_parameter fast_func_verilog
component $c set_parameter fastscan
component $c set_parameter frontend_gds
component $c set_parameter gds
component $c set_parameter ikos
component $c set_parameter lvlib
component $c set_parameter masis
component $c set_parameter mask
component $c set_parameter oasis
component $c set_parameter params
component $c set_parameter plef
component $c set_parameter power_verilog
但我不希望component $c set_parameter
行出现在 等的开头alf
,allpvt
所有开头都是空格。
我只想component $c set_parameter
仅在开头没有空格的地方打印该行。
答案1
搜索任何不以空格字符开头的行(^
在字符类中使用来求反)。对于任何匹配,请将行的开头替换为“组件”文本。
/^
从字符串开头搜索
[^ .. ]
这是一个字符类,否定^
该类的内容。
[:space:]+
字符类是空格或制表符
[^[:space:]]+
但该类被否定,因此从字符串的开头搜索至少一个非空格字符。 (这+
意味着至少出现一次非空格字符)。
如果在正则表达式中找到匹配项/.../
,请执行以下替换 - 在字符串的开头(^ 表示在字符串的开头),添加“组件...”文本。
sed -E '/^[^[:space:]]+/ s/^/component $c set_parameter/' a.cfg