sed を使用して、コロンの左側に表示されるすべてのダッシュを置き換えます。

sed を使用して、コロンの左側に表示されるすべてのダッシュを置き換えます。

ファイルには次の値があります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

各ステップの指示:

  1. h:パターンスペース(現在の入力ライン)を保持スペース(「標準」バッファ)にコピーします。
  2. s/^[^:]*//::パターン空間の最初のパターンより前のすべての項目を削除します。
  3. x:ホールドスペースとパターンスペースを交換します。
  4. s/:.*$//:パターンスペースの内外をすべて削除します。

    パターンスペースには未修正の左が含まれ:、ホールドスペースにはを含む未変更の右が含まれます:

  5. y/-/_/:パターン空間のすべてのダッシュを下線に変更します。

  6. G:間に改行文字を使用して、パターンスペースの末尾に予約済みスペースを追加します。
  7. s/\n//:前の手順で改行文字を削除します。
  8. (暗黙的p):パターンスペースを標準出力として印刷します。

ステップ 4 と 5 は、結果に何の変化もなく互いに変更することができます。

簡単に言えば、sed作業に適したツールではありません(おそらくではありません)。

おすすめ記事