스크립트 내에서 여러 줄로 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
(더 복잡한 것은 테스트하지 않았습니다.)