grep - 여러 줄 패턴 작성

grep - 여러 줄 패턴 작성

스크립트 내에서 여러 줄로 grep패턴 을 작성하는 방법은 무엇입니까 ? bash그렇게:

grep -o -P '
    (?!<.*?(?<!(href))=")
        https?:\/\/(?!(www\.example\.com)).*?
    (?=(">))
' input.txt

프로그램을 작성할 때 php이렇게 할 수 있습니다. 이제 bash 스크립트에서 이것을 시도했지만 작동하지 않습니다. 한줄에 다 적는게 너무 불편하네요 :(

아마도 패턴 내부의 서식을 허용하는 옵션이 있을 것입니다. 즉, grep이 옵션이 활성화되면 공백(공백 및 줄 바꿈)이 인식되지 않습니다.

그렙 버전:

grep -V
grep (GNU grep) 2.25

답변1

-P그럼에도 불구하고 (?x:)개행 문자를 무시할 수는 없습니다. 공백과 탭의 경우 다음과 같이 작동합니다.

echo abab | grep -P $'(?x:a b a\tb)'

그러나 개행 문자는 다르게 작동합니다.

echo ab | grep -P $'(?x:a\nb)'
grep: the -P option only supports a single pattern

적어도 GNU grep 2.16에서는.

답변2

grep다양한 패턴을 구분하려면 줄바꿈을 사용하세요. 그러나 패턴을 변수에 저장하고 다음으로 전달하기 전에 공백을 제거할 수 있습니다 grep.

$ ws=$' \t\n'
$ pat=$'a b\nc'
$ echo abcd | grep "${pat//[$'\n\t ']}"
abcd

(더 복잡한 것은 테스트하지 않았습니다.)

관련 정보