仅在 a.cfg 文件中开头没有空格的地方添加行“component $c set_parameter”

仅在 a.cfg 文件中开头没有空格的地方添加行“component $c set_parameter”

我已附加一个 .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,除了开头有一个空格,例如alfallpvt开头有空格,而且我不想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行出现在 等的开头alfallpvt所有开头都是空格。

我只想component $c set_parameter仅在开头没有空格的地方打印该行。

答案1

搜索任何不以空格字符开头的行(^在字符类中使用来求反)。对于任何匹配,请将行的开头替换为“组件”文本。

/^从字符串开头搜索

[^ .. ]这是一个字符类,否定^该类的内容。

[:space:]+字符类是空格或制表符

[^[:space:]]+但该类被否定,因此从字符串的开头搜索至少一个非空格字符。 (这+意味着至少出现一次非空格字符)。

如果在正则表达式中找到匹配项/.../,请执行以下替换 - 在字符串的开头(^ 表示在字符串的开头),添加“组件...”文本。

sed -E '/^[^[:space:]]+/ s/^/component $c set_parameter/' a.cfg

相关内容