「key:value」ステートメントの値を変更しますが、ファイルにキーが最初に表示される場合にのみ適用されます。

「key:value」ステートメントの値を変更しますが、ファイルにキーが最初に表示される場合にのみ適用されます。

ymlファイルがあります

spring:
  datasource:
    url: url
    username:test
    password: testpwd
api:
  security:
    username:foo
    password: foopwd

次のように、Linuxシステムでコマンドラインを使用して最初に表示されるユーザー名とパスワードのみを更新したいと思います。

spring:
  datasource:
    url: url
    username:toto
    password: totopsw
api:
  security:
    username:foo
    password: foopwd

私が試したとき:

sed -i -e 's!^\(\s*username:\)[^"]*!\1toto!' test.yml

彼はユーザー名をすべて変更しました

ベストアンサー1

別のsedオプション:

sed '1,/username/{/username/ s/:.*/:toto/};
     1,/password/{/password/ s/:.*/:totopsw/}' infile

1,/regex/最初の行から始めて、与えられた内容に一致する最初の行までregex(ここでは文字列username)「ユーザー名」を変更し、「パスワード」部分にも同じことを行います。

おすすめ記事