하위 패턴이 대상 스키마에 포함될 수도 있고 포함되지 않을 수도 있도록 모든 결과를 파악하는 방법은 무엇입니까?

하위 패턴이 대상 스키마에 포함될 수도 있고 포함되지 않을 수도 있도록 모든 결과를 파악하는 방법은 무엇입니까?

다음 결과를 나타내는 문자열을 검색한다고 가정해 보겠습니다.

anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

3개의 문자열 모두와 일치하도록 grep에 대한 공통 구문을 어떻게 작성합니까? 나는 이미 이것을 했다

^.*\w+\d[\[]?[0]?[\]]?\.knownKeyWord.*$  

하지만 인덱스에 대해서는 [1]좋은 방식으로 작성되지 않았는데, 로 바꿔도 [1]구문 [2342jdsjf]을 너무 많이 변경할 필요가 없도록 어떻게 구현할 수 있을까요?

답변1

확장된 정규식을 사용하십시오:

$ grep -E '[[:alnum:]_]+[[:digit:]]+(\[[^]]+\])?\.knownKeyWord' <file
anything1.knownKeyWord
anything2.knownKeyWord
anything3[1].knownKeyWord

그러면 다음 형식의 문자열이 포함된 모든 줄이 추출됩니다.

XXXNNN[YYY].knownKeyWord

또는

XXXNNN.knownKeyWord

여기서 XXX은 비어 있지 않은 영숫자 문자열(포함될 수도 있음 _), NNN하나 이상의 숫자 문자열 및 YYY포함되지 않은 문자열입니다 ].

grep-x일치하는 경우 와 함께 사용완전한 라인. -w일치가 완료되어야 하는 경우 다음을 사용하세요.성격(즉, 다른 것의 하위 문자열이 아님)


sed정규식의 각 부분이 일치하는 부분을 표시 하려면 다음을 수행하십시오 .

$ sed -E 's/([[:alnum:]_]+)([[:digit:]]+)(\[[^]]+\])?(\.knownKeyWord)/<\1><\2><\3><\4>/' <file
<anything><1><><.knownKeyWord>
<anything><2><><.knownKeyWord>
<anything><3><[1]><.knownKeyWord>

답변2

이 시도,

grep -w 'knownKeyWord$' file.txt

~에서man

-w, --word 정규 표현식

          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.

관련 정보