$ 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
Este script awk lê o arquivo como um conjunto de campos : -delimited. Aplica gsub() ao primeiro campo em cada linha, alterando cada traço para um sublinhado. O único 1 é a abreviação de { print } , que imprimirá cada linha de entrada (agora modificada).
FS=':' OFS=':' define os separadores de campo de entrada e saída como : .
Também é possível fazer isso com sed , seja através de alguma expressão regular muito complicada ou utilizando seu espaço de espera (ou ambos), mas essa não é uma solução que "rola para fora da língua". / p>
(depois de pensar um pouco) Usando 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
Explicação de cada etapa:
-
h: Copie o espaço padrão (a linha de entrada atual) para o espaço de espera (um buffer de "uso geral"). -
s/^[^:]*//: remova tudo antes do primeiro:no espaço de padrão. -
x: Troque o espaço de espera e o espaço de padrão. -
s/:.*$//: remova o:e tudo depois dele no espaço padrão.O padrão de espaço agora contém o lado esquerdo não modificado do
:, enquanto o espaço de espera contém o lado direito não modificado, incluindo o:. -
y/-/_/: altere todos os traços para sublinhados no espaço padrão. -
G: Anexe o espaço de espera ao final do espaço de padrão com uma nova linha entre os dois. -
s/\n//: remova o caractere de nova linha da etapa anterior. - (
pimplícita): imprime o espaço padrão para a saída padrão.
Os passos 4 e 5 podem ser trocados sem qualquer alteração no resultado.
Resumindo: sed não é (pode não ser) a ferramenta certa para o trabalho.