1. ホーム
  2. regex

[解決済み] sedエラー。"invalid reference \1 on `s' command's RHS" (無効な参照)

2022-07-24 08:20:12

質問

の中核として、いくつかの置換コマンドを実行しています。 mavenのための色付けスクリプト . そのうちのひとつである sed コマンドはシェルで次のように検索する正規表現を使います。 ここで説明されている . 現在の(動作しない)実装は ここで .

コマンドのバリアントの1つをスクリプトに含めると、異なる動作が発生します。

バリエーション 1:

$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"

スクリプトに適応される。

-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \

エラーです。 と入力したのと同じ情報を出力します。 $ sed . おかしいな!?


バリエーション2です。

$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"

スクリプトに適応される。

-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \

エラーです。

sed: -e expression #7, char 59: `s' コマンドの RHS にある不正な参照 ¦1

どのように解決するのですか?

そのために実際にキャプチャする必要はないのでしょうか。

-r -e "s/WARNING: (\([a-zA-Z0-9./\\ :-]\+\))/${warn}WARNING: \1${c_end}/g" \

(注:未検証)

がない場合は -r 引数の後方参照(例えば \1 のように) は、それぞれの括弧が \ 文字でエスケープされない限り、動作しません。

-r のように、引数の後方参照(例えば \1 のような)引数の後方参照は、括弧がエスケープされていない限り、動作しません。