grepは文字列内の一重引用符と二重引用符を検索します。

grepは文字列内の一重引用符と二重引用符を検索します。

指定されたファイルから.eplファイル名またはファイルパスを見つけるためにgrepを作成しようとしています。

私は次の正規表現を試しました

パート1:REGEX grep -rEco "/(.+).epl|(.+).epl" ./index.eplを使用して結果を取得する

url => 'xyz.epl
url => 'xyz.epl
url => 'xyz.epl
url => "packet/xyz.epl
url => "/web/abc/xyz.epl
url => qq{/web/abc/xyz.epl
url => '/web/abc/def/xyz.epl
url => '/web/abc/def/xyz.epl
url => 'xyz.epl
url => 'xyz.epl
$url = "/web/abc/def/xyz.epl
var requestURL = "xyz.epl
var requestURL = "xyz.epl
<a style="float:left;" href="xyz.epl
[- Execute('components/xyz.epl
Welcome, <a href="xyz.epl
[- Execute('components/xyz.epl
<a href="xyz.epl
[- Execute(`'components/xyz.epl`

しかし、次の項目だけを一致させたい(前の引用符の有無にかかわらず)。

'xyz.epl(OR xyz.epl)
'xyz.epl
'xyz.epl
"packet/xyz.epl(OR packet/xyz.epl)
"/web/abc/xyz.epl(OR "/web/abc/xyz.epl)
/web/abc/xyz.epl
'/web/abc/def/xyz.epl
'/web/abc/def/xyz.epl
'xyz.epl
'xyz.epl
"/web/abc/def/xyz.epl
"xyz.epl
"xyz.epl
"xyz.epl
'components/xyz.epl
"xyz.epl
'components/xyz.epl
"xyz.epl
'components/xyz.epl

希望の結果を得るために努力しましたが、grep -rEoc '\/(.+)\.epl|[\"\'](.+)\.epl'「優れた」結果を得ました。間違い。

正規表現の周りの引用符を削除し、「無効なバッチ()」を得ました。

ベストアンサー1

私はこれがあなたのためにそれを行うと思います:

grep -oP "(?<=['\"]|qq{)[xp/c][^\`]+" ./index.epl

これは言う:

-o一致する部分だけが保持されます。順方向遷移グループを開始するために単一内で単一をエスケープすることはできないので、二重引用符を使用して
-PPerlスタイルの正規表現(振り返るために必要です)を使用してください。つまり、いくら多く一致しても以前にもこのパターンがありますが、「前の部分」は私たちが維持したいパターンの一部ではないという意味です。一重引用符または二重引用符のいずれかと一致するか、リテラル文字列 'qq{'と一致します。パターンが一致した場合、見つかった場合はx、p、/またはcのいずれかと一致します。 (良いことではありませんが、少数の場合を確認する必要があります。)
"..."
(?<=...)
[\'\"]
|qq{

[xp/c]
[^

編集する:qq{一重引用符や二重引用符をパターンの一部として含めるには、いかなる方法でも含めたくないと思われるため、少しトリッキーです。

おすすめ記事