![정확한 단어를 grep](https://linux55.com/image/117621/%EC%A0%95%ED%99%95%ED%95%9C%20%EB%8B%A8%EC%96%B4%EB%A5%BC%20grep.png)
샘플 파일:
t2csi1m9@olth101 [bundleversion_sync]$ cat 1
arun:1.0
arun_kumar:1.2
arun-vinoth:1.3
arun_arun:1.4
t2csi1m9@olth101 [bundleversion_sync]$
t2csi1m9@olth101 [bundleversion_sync]$ grep -w 'arun' 1
arun:1.0
arun-vinoth:1.3
t2csi1m9@olth101 [bundleversion_sync]$
arun
파일을 grep하면 1
2개의 출력이 나오고 첫 번째 출력만 필요합니다. ( arun:1.0
).
답변1
예, 두 개의 일치 항목을 얻습니다. 둘 다 단어를 별도의 단어로 arun:1.0
포함 하고 단어가 아닌 문자 앞에 끝나며 두 결과 모두( 는 단어 문자로 처리되기 때문입니다 .arun-vinoth:1.3
arun
:
-
_
arun_kumar:1.2
아니요당신의 명령에 따라 돌아오십시오).
이 경우 ^arun:
검색 패턴으로 사용하는 것이 더 좋습니다(예: string 으로 시작하는 모든 행) arun:
.
답변2
정의단어for는 grep -w
일련의 영숫자 또는 밑줄 문자입니다(로케일 또는 ASCII에서만 구현/버전에 따라 검색하는 내용이 단어 문자로 시작하거나 끝나지 않는 경우 동작이 달라집니다).
와 같은 일부 도구를 사용하면 사용자 정의 zsh
할 수 있습니다 vim
.xterm
단어. 그러나 grep
내가 아는 한 아무것도 구현되지 않았습니다. 따라서 다른 정의가 필요하다면단어, 다른 방법으로 직접 구현해야 합니다.
예를 들어, 귀하의 경우단어정의는 다음과 같아야 합니다.콜론, 당신은 할 것입니다 :
grep -E '(^|:)arun(:|$)'
( arun
( |
) 뒤에 줄의 시작 부분( ^
) 또는 a :
다음에 a :
또는 줄의 끝 부분( $
)이 옵니다).
또는 표준 기본 정규식을 사용하십시오.
grep '^\(.*:\)\{0,1\}arun\(:.*\)\{0,1\}$'
(줄의 시작( ^
), 선택적으로 ( ), \{0,1\}
( )로 끝나는 일련의 문자, 선택적으로 ( )로 시작하는 일련의 문자 및 줄의 끝( ))..*
:
arun
:
$
또는 PCRE를 사용하십시오(위의 ERE 변형 외에도 PCRE도 지원됨).
grep -P '(?<![^:])arun(?![^:])'
( arun
그렇다면앞에는 없어( (?<!...)
음수 뒤돌아보기 연산자) 뒤에는 (?!...)
( ) 이외의 문자가 올 수 없습니다. with (단어 출력만), (입력에서 오프셋 반환), (단어 강조 표시)도 사용할 수 있습니다.:
[^:]
grep -o
grep -b
grep --color
-w
아니면 당신의단어정의는 정상이어야합니다단어( [[:alnum:]_]
) + 하이픈:
grep -E '(^|[^[:alnum:]_-])arun([^[:alnum:]_-]|$)'
등.