주어진 파일에서 .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
일치하는 부분만 유지됩니다. 정방향 전환 그룹을 시작하기 위해 단일 내에서 단일을 이스케이프할 수 없기 때문에 큰따옴표를 사용하여
-P
Perl 스타일 정규식(돌아보기에 필요함)을 사용하십시오 . 즉, 아무리 많이 일치하더라도 이전에도 이 패턴이 있지만 "이전 부분"은 우리가 유지하려는 패턴의 일부가 아니라는 의미입니다. 작은따옴표 또는 큰따옴표 중 하나와 일치하거나 리터럴 문자열 'qq{'와 일치합니다 . 패턴이 일치하면 발견되면 x, p, / 또는 c 중 하나와 일치합니다. (좋지는 않지만 소수의 경우를 확인해야 합니다.) ]+` 백틱이 아닌 모든 것, 1회 이상
"..."
(?<=...)
[\'\"]
|qq{
[xp/c]
[^
편집하다:qq{
작은 따옴표나 큰 따옴표를 패턴의 일부로 포함하려면 어떤 식으로든 포함 하고 싶지 않은 것 같기 때문에 약간 까다롭습니다 .
답변2
예제 입력이 주어지면 원하는 출력이 생성됩니다.
grep -Eo '["'\'']?[/[:alnum:]]+\.epl'
파일 이름의 문자(문자, 숫자, 슬래시)에 대해 몇 가지 가정을 합니다. 이 대괄호 세트에 더 많은 문자를 자유롭게 입력할 수 있습니다.