다음 결과를 나타내는 문자열을 검색한다고 가정해 보겠습니다.
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.