正規表現の Grep 構文エラーの修正

正規表現の Grep 構文エラーの修正

grepで実行する必要がある正規表現を作成しました。オンライン正規表現ツールと連携して動作するので、正規表現は大丈夫だと確信していますが、実行すると

grep -r -P -o -h '(?<=(?<!def )my_method )(["'])(?:(?=(\\?))\2.)*?\1'

エラーが発生しましたSyntax error: ")" unexpected

ベストアンサー1

正規表現は一重引用符で囲まれていますが、含むアポストロフィ。

一重引用符は["']エスケープする必要があります。それ以外の場合は、引用符付き文字列の終わりをシェルに通知します。

これにより問題が解決します。

grep -r -P -o -h '(?<=(?<!def )my_method )(["'\''])(?:(?=(\\?))\2.)*?\1'
#                                            ^^^^

を使用すると、["'\'']最初の部分はリテラル一重引用符を挿入して文字列'の最初の部分を終了し\'、最後の部分は'古いビットに関連付けられる新しい一重引用符文字列を開始します。中央の一重引用符のみが正規表現自体に表示され、残りの2つの一重引用符はシェルから削除されます。

おすすめ記事