파일에 다음 값이 있습니다 config.yml
.
scratch-org-def: config/project-scratch-def.json
assign-permset: false
permset-name:
run-apex-tests: true
apex-test-format: tap
delete-scratch-org: false
show-scratch-org-url: true
콜론(:) 왼쪽에 나타나는 모든 대시(-)를 밑줄(_)로 바꿔야 합니다.
나는 이것을 시도했지만 sed '/.*: /s/-/_/g' config.yml
모든 대시(포함)를 대체합니다 config/project-scratch-def.json
.
결장에서 멈추기를 바라면서 시도해 보았지만 sed '/^[^:]*:/s/-/_/g' config.yml
효과는 같습니다.
답변1
$ awk '{ gsub("-", "_", $1) } 1' FS=':' OFS=':' config.yml
scratch_org_def: config/project-scratch-def.json
assign_permset: false
permset_name:
run_apex_tests: true
apex_test_format: tap
delete_scratch_org: false
show_scratch_org_url: true
스크립트 는 -로 구분된 필드 집합 awk
으로 파일을 읽습니다 . 각 줄의 첫 번째 필드에서 :
작동하며 gsub()
각 대시를 밑줄로 변경합니다. 각(현재 수정된) 입력 행에 대해 별도의 1
약어가 { print }
인쇄됩니다.
FS=':' OFS=':'
입력 및 출력 필드 구분 기호를 로 설정합니다 :
.
매우 복잡한 정규식을 사용하거나 예약된 공간(또는 둘 다)을 활용하여 이를 수행하는 것도 가능 sed
하지만 "즉시 사용 가능한" 솔루션은 아닙니다.
(생각한 후에) 다음을 사용하십시오 sed
.
$ sed 'h;s/^[^:]*//;x;s/:.*$//;y/-/_/;G;s/\n//' config.yml
scratch_org_def: config/project-scratch-def.json
assign_permset: false
permset_name:
run_apex_tests: true
apex_test_format: tap
delete_scratch_org: false
show_scratch_org_url: true
각 단계에 대한 지침:
h
: 패턴 공간(현재 입력 라인)을 유지 공간("일반" 버퍼)에 복사합니다.s/^[^:]*//
:
: 패턴 공간에서 첫 번째 패턴 이전의 모든 항목을 삭제합니다.x
: 홀드 공간과 패턴 공간을 교환합니다.s/:.*$//
::
패턴 공간 안팎을 모두 삭제합니다.이제 패턴 공간에는 수정되지 않은 왼쪽이 포함되고
:
, 홀드 공간에는 을 포함하여 수정되지 않은 오른쪽이 포함됩니다:
.y/-/_/
: 패턴 공간의 모든 대시를 밑줄로 변경합니다.G
: 사이에 개행 문자를 사용하여 패턴 공간의 끝에 예약된 공간을 추가합니다.s/\n//
: 이전 단계에서 개행 문자를 제거합니다.- (암시적
p
): 패턴 공간을 표준 출력으로 인쇄합니다.
4단계와 5단계는 결과에 아무런 변화 없이 서로 바뀔 수 있습니다.
간단히 말해서, sed
작업에 적합한 도구는 아닙니다(아마도 아닙니다).
답변2
나생각하다sed
루프에서 대시를 교체하고 첫 번째 콜론에 대시가 포함되지 않은 모든 항목을 일단 중단하면 됩니다.
sed ':a; /^[^-:]*:/b; s/-/_/;ta'
전임자.
$ sed ':a; /^[^-:]*:/b; s/-/_/;ta' config.xml
scratch_org_def: config/project-scratch-def.json
assign_permset: false
permset_name:
run_apex_tests: true
apex_test_format: tap
delete_scratch_org: false
show_scratch_org_url: true
답변3
3단계로 결과를 얻었습니다
먼저 Second_part.txt 파일에 저장한 콜론 뒤의 두 번째 부분을 분리했습니다.
두 번째 단계에서는 첫 번째 부분을 콜론까지 분리하고 "-"를 "_"로 바꾸고 first_part_after_relacement 파일에 저장합니다.
붙여넣기 명령을 사용한 마지막 단계에서는 두 파일을 결합하여 원하는 결과를 얻었습니다.
주문하다
sed -ne "s/\(.*:\)\(.*\)/\2/p" l.txt > Second_part.txt
sed -ne "s/\(.*:\)\(.*\)/\1/p" l.txt | sed "s/-/_/g" > first_part_after_relacement
paste first_part_after_relacement Second_part.txt | sed -r "s/\s+//g"
산출
scratch_org_def:config/project-scratch-def.json
assign_permset:false
permset_name:
run_apex_tests:true
apex_test_format:tap
delete_scratch_org:false
show_scratch_org_url:true
참고: 이전에 제공된 솔루션에 비해 2단계가 더 추가되었습니다.