grep 검색을 사용하여 문제를 해결하려고 하다가 이상한 점을 발견했습니다.
내 file1.txt에 다음 두 줄이 있다고 가정합니다.
hello
to you
내가 매번
grep $'a\n' file1.txt
# Output
hello
to you
grep -o $'a\n' file1.txt
# Output
# Nothing
grep $'a\nb' file1.txt
# Output
# Nothing
$는 파일에 없지만 여전히 전체 파일을 인쇄하는 개행 문자가 뒤따른다는 것을 a\n
의미합니까 ? a
왜 그럴까요?
PS - -z
옵션을 사용해도 동작은 동일합니다.
답변1
grep
줄 바꿈으로 구분된 일련의 "패턴"(예: 하나 이상)을 허용하므로 grep $'a\n' infile
다음과 같습니다.
grep 'a
' infile
또는 grep -e 'a' -e '' infile
패턴 a
(이 경우 일치하는 항목이 없음)을 제공한 다음 빈 패턴을 제공합니다.''
모든 라인과 일치. 기사에도 언급되어 있어요GNU Grep 매뉴얼:
빈 패턴이 모든 입력 라인과 일치하는 이유는 무엇입니까?
"grep" 명령은 패턴과 일치하는 문자열이 포함된 행을 검색합니다. 각 줄에는 빈 문자열이 포함되어 있으므로 빈 패턴으로 인해 "grep"이 각 줄에서 일치하는 항목을 찾습니다.
grep $'a\nb'
동등하다
grep 'a
b' infile
또는 grep -e 'a' -e 'b' infile
. 입력 내용에 일치하는 항목이 없으므로 아무 것도 인쇄되지 않습니다.
물어
모든 줄과 일치 하는데
''
왜 아무 것도 인쇄하지 않습니까-o
?
이것GNU 매뉴얼 페이지말했다(강조):
-o
,--only-matching
인쇄 일치만(비어있지 않음)선의 일부를 일치시키세요...
지금은 OSX에 액세스할 수 없지만 해당 매뉴얼 페이지에 이 내용이 언급되어 있을 것이라고 확신합니다.GNU Grep 매뉴얼. 일치하는 선의 일치하는 부분부터비었다,아무것도 인쇄되지 않습니다.