Grep - 실제 고정 문자열 검색

Grep - 실제 고정 문자열 검색

고정된 패턴/문자열을 일치시키려고 합니다.

print
int

이 예에서 grep -F 'int'or를 사용하면 grep -F "int"일반적으로 -F 플래그와 함께 "고정" 문자열이 생성됩니다.

int하지만 이 예에서는 두 문자열을 모두 일치합니다(단지 with 라인을 일치시키는 대신 print).

다른 많은 게시물에도 비슷한 목표/문제가 있는 것 같지만,해당 게시물에서 권장되는 -F 플래그가 작동하지 않는다는 것이 여기에 명확하게 명시되어 있습니다..

실제 고정 문자열을 일치시키기 위해 grep을 어떻게 사용할 수 있습니까?

답변1

-F정규식 메타 문자와 같은 .문자 해석을 끄고 *대신 문자열 리터럴로 처리합니다. 패턴이 하위 문자열, 전체 단어 또는 전체 행과 일치하는지 여부에는 영향을 미치지 않습니다. 이를 위해서는 -w또는 -x플래그가 필요합니다.

   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.  This option has no effect if -x is also specified.

   -x, --line-regexp
          Select  only  those  matches  that exactly match the whole line.
          For a regular expression pattern, this  is  like  parenthesizing
          the pattern and then surrounding it with ^ and $.

답변2

문제는 "print"라는 단어 끝에 "int"도 나타난다는 것입니다.

-F를 사용하여 문자열을 수정하면 정규식 검색이 비활성화될 수 있지만 고정된 문자열 "int"는 여전히 "print"라는 단어에 남아 있습니다.

해결책은 정규식 사용으로 돌아가서 "전체 단어" 검색을 위해 단어 경계도 필요하도록 지정하는 것일 수 있습니다.

echo -e 'int\nprint' | grep '\bint\b'

답변3

다음 중 하나를 시도해 보십시오.

echo -e 'int\nprint\print' |grep -P '(^|\s)\int(?=\s|$)'

echo 'int - print'|grep -E '(^|\s)int($|\s)'

echo 'int - print'|grep -Fw "int"

관련 정보