정규식을 사용하여 문자열을 제외하는 방법은 무엇입니까?

정규식을 사용하여 문자열을 제외하는 방법은 무엇입니까?

test라는 파일이 있습니다.

http://edge.sharethis.com
http://edge.sharethis.com
https://timetosa.com
http://timetosa.com
https://webtest.es
holahttp.com
timetosa

timetosa가 포함된 행을 제외하는 표현식을 원합니다.

이는 허용되지 않습니다. cat test | grep -v timetosa다른 프로그램에서 순수 정규식을 사용하고 싶기 때문입니다.

나는 그것이 관련되어 있다는 것을 알고 있지만 ^문자열 timetosa를 포함하지 않는 것에 영향을 미치는 올바른 솔루션을 찾을 수 없습니다.

cat test | sed 's/^[timetosa]//g'그리고 cat test | sed 's/^(timetosa)//g'성공하지 못했습니다.

누구든지 나를 도와줄 수 있나요?

답변1

sed '/timetosa/d' <test

...할 거예요. 또는:

sed -n '/timetosa/!p' <test

그러나 그럼에도 불구하고(허용 여부):

grep -v timetosa <test

...세 가지 솔루션 중 가장 성능이 뛰어난 솔루션이 될 것이며 상당한 이점을 가질 수 있습니다.

@Sparhawk 덕분에 나는 길을 찾았습니다.zaproxy 문서. 기준:

  • URL 정규 표현식
    • 내부에포함하다*,제외하다*패널 및로그인/로그아웃색인확인하다제외된 URL을 정의하기 위해 정규식을 입력할 수 있는 패널입니다.

...그리고 다음은 필터링을 시도하는 것 같습니다.문맥? 설명서에 따르면 다음을 동시에 수행할 수 있습니다.그리고제외 목록:

  • 맥락에서 제외
    • 이를 통해 컨텍스트에서 제외될 URL을 관리할 수 있습니다.
    • 포함하고 싶지 않지만 하나 이상 일치하는 URL에 대해 정규식을 지정하기만 하면 됩니다.포함하다정규식.

따라서 제외할 수 있습니다.일부이전에 포함했던 것.

그래도 이것이 첫 번째 요점은 아닐 수도 있습니다.완전히중요하지 않습니다. 이는 문서에도 언급되어 있습니다.부가기능부분:

  • 통화 신청

    • 선택한 메시지의 URL과 같은 상황별 정보를 전달하여 다른 애플리케이션을 호출할 수 있습니다.
    • 예를 들어, nmap스캔하려는 사이트를 전달하여 호출할 수 있습니다.

    • 애플리케이션 구성 사용법옵션적용화면.

답변2

정규 언어보수로 닫혀 있으므로 모든 정규식에는 원래 정규식과 일치하지 않는 입력과 정확히 일치하는 정규식이 있습니다.

그러나 최악의 경우에는 보완 언어와 일치하는 가장 작은 정규식의 길이가 원래 정규식의 길이에 기하급수적으로 늘어나게 됩니다. 따라서 정규식이 존재한다는 것은 보장되지만 단순하다는 보장은 없습니다. 가능한알고리즘으로 계산정말로 필요한 경우.

정규식을 고정하는 연산자 ^는 관련이 없습니다. "소문자가 아닌 모든 문자" ^와 같은 문자 집합을 생각할 수 있습니다 . [^a-z]이는 문자 집합 단축 표기법의 일부일 뿐이며 문자열 집합을 보완하는 데 도움이 되지 않습니다.

Perl 또는 호환되고 널리 사용되는 PCRE와 같은 일부 정규식 엔진은 다음을 포함하여 기존 연산자 이외의 연산자를 지원합니다.어설션을 둘러보세요. 부정적 예측 어설션은 정규식을 여러 부분으로 나누지 않고 부정하는 간단한 방법을 제공합니다. 지원하는 정규식을 확인하려면 소프트웨어 설명서를 확인하세요.

^(?!.*timetosa)

또는 vim:

^(.*timetosa)\@!

대부분의 시스템에는 정규식 보완이 필요하지 않습니다 grep -v. 예를 들어 match-invert 플래그를 사용하거나 첫 번째 일치 설정에서 규칙을 신중하게 정렬하여 동일한 효과를 얻을 수 있기 때문입니다(일치하는 경우 .*timetosa.*아무것도 하지 않고 일치를 중지함 ). 규칙; 일치하면 .*뭔가를 하십시오).

관련 정보