여러 줄에 다음과 같은 일반 및 특수 문자 문자열을 포함 할 수있는 로그 파일 (application.log)이 있습니다.
*^%Q&$*&^@$&*!^@$*&^&^*&^&
이 특수 문자열이 포함 된 줄 번호를 검색하고 싶습니다.
grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
위의 명령은 결과를 반환하지 않습니다.
줄 번호를 얻는 올바른 구문은 무엇입니까?
여러 줄에 다음과 같은 일반 및 특수 문자 문자열을 포함 할 수있는 로그 파일 (application.log)이 있습니다.
*^%Q&$*&^@$&*!^@$*&^&^*&^&
이 특수 문자열이 포함 된 줄 번호를 검색하고 싶습니다.
grep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
위의 명령은 결과를 반환하지 않습니다.
줄 번호를 얻는 올바른 구문은 무엇입니까?
답변:
에게 grep
사용하여 고정 문자열로 입력을 처리하는 -F
옵션을 선택합니다.
grep -F '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
-n
라인 번호를 얻으려면 옵션 이 필요합니다.
grep -Fn '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
^
, $
, .
, *
와 \
. 또는 시도 할 수도 fgrep
있습니다.
fgrep
는 grep -F
.
egrep '*^%Q&$*&^@$&*!^@$*&^&^*&^&' application.log
?
나를 위해 일한 것은 다음과 같습니다.
grep -e '->'
-e는 다음 인수가 패턴이며 인수로 해석되지 않음을 의미합니다.
출처 : http://www.linuxquestions.org/questions/programming-9/how-to-grep-for-string-769460/
-
참조하십시오.
캐리지 리턴, 즉 \r
문자 또는를 grep하려면 다음 0x0d
과 같이 할 수 있습니다.
grep -F $'\r' application.log
또는 POSIX 호환성을 위해, 또는를 사용하십시오 printf
.echo
grep -F "$(printf '\r')" application.log
그리고 우리가 사용할 수있는 hexdump
, 또는 less
에 참조 결과를 :
$ printf "a\rb" | grep -F $'\r' | hexdump -c
0000000 a \r b \n
사용 $'\r'
및 기타 지원되는 문자에 대해서는 Bash Manual> ANSI-C Quoting을 참조하십시오 .
$ 'string'형태의 단어는 특별히 취급됩니다. ANSI C 표준에 지정된대로 백 슬래시 이스케이프 문자가 대체 된 문자열로 단어가 확장됩니다.
영숫자 문자와 공백을 제거 할 수 있습니다. 그런 다음 사용 -n
하면 줄 번호가 제공됩니다. 다음을 시도하십시오.
grep -vn "^[a-zA-Z0-9 ]*$" application.log
-b 옵션과 함께 vi를 시도하면 특수한 줄 끝 문자가 표시됩니다 (일반적으로 유닉스 OS의 txt 파일에서 창 줄 끝을 볼 때 사용합니다).
그러나 스크립팅 된 솔루션을 원한다면 분명히 vi가 작동하지 않으므로 grep과 함께 -f 또는 -e 옵션을 시도하고 결과를 sed 또는 awk로 파이프 할 수 있습니다. grep man 페이지에서 :
Matcher Selection -E, --extended-regexp PATTERN을 확장 정규식으로 해석합니다 (ERE, 아래 참조). (-E는 POSIX에 의해 지정됩니다.)
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified
by POSIX.)
^@
:^
뒤에@
또는 nul 문자가 오는 것을 의미 합니까?