$ 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. - (
p
implí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.