先頭にスペースが含まれていないa.cfgファイルにのみ「comComponent $ c set_parameter」行を追加します。

先頭にスペースが含まれていないa.cfgファイルにのみ「comComponent $ 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_parameterLinuxでコマンドを使用して、先頭にスペースが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しかし、etcの先頭にスペースで始まる行が表示されることはalf望ましくありallpvtません。

component $c set_parameter最初にスペースがない部分にのみ行を印刷したいと思います。

答え1

空白文字で始まらない行を検索します(^否定するには文字クラスで使用)。一致するものがある場合は、行の先頭を「コンポーネント」テキストに置き換えます。

/^文字列の先頭から検索

[^ .. ]これは文字クラスであり、^クラスの内容を無効にします。

[:space:]+文字クラスは空白またはタブです。

[^[:space:]]+ただし、クラスは無効になるため、文字列の先頭で空白以外の文字を1つ以上検索します。 (つまり+、空白以外の文字が複数回表示されます。)

正規表現で一致するものが見つかった場合は、/.../次のように置き換えます。文字列の先頭(^は文字列の先頭を意味します)に「Component ...」テキストを追加します。

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

関連情報