콜론을 추가하면 이 grep 패턴이 깨지는 이유는 무엇입니까?

콜론을 추가하면 이 grep 패턴이 깨지는 이유는 무엇입니까?

를 사용하여 검색을 수행했지만 grep예상대로 작동하지 않았습니다. 내 파일에 다음 줄이 있습니다.

blacklists/redirector/domains:needyoutube.com
lacklists/redirector/domains:openyoutube.com
blacklists/redirector/domains:proxy-youtube.com
blacklists/redirector/domains:proxytoyoutube.com
blacklists/redirector/domains:streamyoutube.com
blacklists/redirector/domains:unblockyoutube.com

내가 실행할 때 :

grep ':youtube.com'

결과가 없습니다. 다음은 작동합니다:

grep 'youtube.com'

콜론( )을 피하는 방법은 무엇입니까 :? 백슬래시(grep '\:youtube.com')가 작동하지 않습니다. 저는 RHEL 5, grep(GNU grep) 2.5.1을 사용합니다.

업데이트: grep하려는 항목을 잊어버렸습니다. 다음 항목도 존재합니다.

./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br

정확한 도메인 이름이 포함된 필드만 가져오고 싶습니다. 그래서 youtube.com 링크의 블랙리스트를 얻고 싶어서 ":youtube.com"을 사용합니다.

위 목록(youtube.com, youtube.com.br)에서 youtube.com만 얻어야 하는데 아무것도 얻지 못합니다.

제가 충분히 명확하게 설명하지 못했습니다. 죄송합니다.

답변1

그렙은 훌륭한 일을 합니다. 파일에 ':youtube.com'이라는 줄이 포함되어 있지 않습니다.

이 모든 라인을 일치시키려면 :다음을 사용할 수 있습니다.

grep ":.*youtube\.com"

고쳐 쓰다:

질문을 업데이트하면 두 번째 부분에 답변해야 합니다.

위 목록(youtube.com, youtube.com.br)에서 youtube.com만 얻어야 하는데 아무것도 얻지 못합니다.

당신은 grep ':youtube.com'실제로 필요한 일을 했습니다. 그것이 당신에게 도움이 될 수 있는 경로 옵션이라면 -R.

답변2

"블랙리스트/리디렉터/도메인"은 실제로 파일 이름이지 파일 내용의 일부가 아닌 것 같습니다. grep ':youtube.com'훌륭하게 작동합니다:

% cat test.txt
./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br
blacklists/redirector/domains:needyoutube.com
lacklists/redirector/domains:openyoutube.com
blacklists/redirector/domains:proxy-youtube.com
blacklists/redirector/domains:proxytoyoutube.com
blacklists/redirector/domains:streamyoutube.com
blacklists/redirector/domains:unblockyoutube.com
% grep ':youtube.com' test.txt
./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br

"youtube.com"으로 시작하는 줄을 반복적으로 찾으려면 다음을 사용하세요.grep -R '^youtube\.com' path/to/dir

답변3

다른 사람들이 지적했듯이 콜론 문자는 grep 검색 파일이 아니라 grep의 출력에 있습니다. grep이 파일에서 일치하는 줄을 찾으면 다음과 같이 표시됩니다.filename:line

현재 겪고 있는 문제는 youtube.com은 포함하지만 Proxyyoutube.com은 포함하지 않는 파일을 일치시키려는 것입니다. 그렇죠?

귀하의 경우 찾고 있는 문자열이 줄의 시작 부분에 있는 것 같으므로 다음을 수행할 수 있습니다.

grep * "^youtube.com"

위쪽 화살표 문자는 줄의 시작 부분에서만 일치하므로 "extrastuffhereyoutube.com"에서는 일치를 피할 수 있습니다.

답변4

나는 선호한다자르다

echo '
blacklists/redirector/domains:needyoutube.com
lacklists/redirector/domains:openyoutube.com
blacklists/redirector/domains:proxy-youtube.com
blacklists/redirector/domains:proxytoyoutube.com
blacklists/redirector/domains:streamyoutube.com
blacklists/redirector/domains:unblockyoutube
./blacklists/movies/domains:youtube.com
./blacklists/movies/domains:youtube.com.br
'|cut -d: -f2

관련 정보