Macでsedで正規表現を使用すると、期待した結果は生成されません。

Macでsedで正規表現を使用すると、期待した結果は生成されません。

私のファイルには、スクリプトを使用して調整したい次の行が含まれています。

module.exports = {
  parserOptions: {
    project: ['./tsconfig.json'],
  },
... more stuff here
}

だからこんな感じです。私は結果の空白についてあまり気にしません。

module.exports = {
  parserOptions: {
    project: ['./tsconfig.json'],
    tsconfigRootDir: __dirname
  },
... more stuff here
}

私が今持っているものは次のとおりです。

sed -r "s/project:\s*\['.\/tsconfig.json'\],/project:\['.\/tsconfig.json'\],\ntsconfigRootDir\:__dirname/g" filename

しかし、それは一致しませんでした。このウェブサイトで一致パターンを試しました。https://sed.js.org/index.html?snippet=y7KG95そこから私が望む結果を得ました。私も試してみましたが、sed -E運がありませんでした。

スクリプト設定がうまくいくと言いたいです。そう簡単なものを変更するとうまくいくs/project/projectA/gからです。

ありがとうございます!

macOS Monterey 12.5.1の使用

答え1

-rすべて GNU-isms である 、\sと で\n置き換えています (\sもちろん Perl'ism に近いです)。これも\:非標準です。しかし、あなたは\目の前で.消えました。

標準的に構文は次のとおりです。

sed 's@^\([[:blank:]]*\)project:[[:blank:]]*\['\''\./tsconfig\.json'\''\]@&,\
\1tsconfigRootDir: __dirname@g' filename

[[:blank:]]\s(まあ、\sそれはもっと多いでしょうが、ここではスペース(perlで)と一致する[[:space:]]のに十分でなければなりません)の代わりに、改行文字を置き換えに含めるための改行文字が続きます。\h\

project追加された行を同じインデントにインデントするために、行の先頭のスペースをキャプチャします(キャプチャ\1グループ呼び出し)。

構文の確認あなたの sed実装とバージョンの確認それさまざまな実装やバージョンを説明できるインターネット上の任意のページを含めるか置き換えるmanドキュメントです。info

sedこのユーティリティのPOSIX 2018標準仕様も参照してください。そこ

関連情報