시작 부분에 공백이 없는 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_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하지만 etc 의 시작 부분에 공백으로 시작하는 줄이 나타나는 것을 alf원하지 allpvt않습니다 .

component $c set_parameter처음에 공백이 없는 부분에만 줄을 인쇄 하고 싶습니다 .

답변1

공백 문자로 시작하지 않는 줄을 검색합니다( ^부정하려면 문자 클래스에서 사용). 일치하는 항목이 있으면 줄의 시작 부분을 "구성 요소" 텍스트로 바꿉니다.

/^문자열의 처음부터 검색

[^ .. ]이것은 문자 클래스이며 ^클래스의 내용을 무효화합니다.

[:space:]+문자 클래스는 공백 또는 탭입니다.

[^[:space:]]+그러나 클래스는 무효화되므로 문자열 시작 부분에서 공백이 아닌 문자를 하나 이상 검색합니다. (즉 +, 공백이 아닌 문자가 한 번 이상 나타납니다.)

정규식에서 일치하는 항목이 발견되면 /.../다음과 같이 바꾸십시오. 문자열 시작 부분(^은 문자열 시작 부분을 의미)에 "Component..." 텍스트를 추가합니다.

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

관련 정보