Grep이 공백이 있는 문자열을 검색하지 않습니다.

Grep이 공백이 있는 문자열을 검색하지 않습니다.

내 파일에는 다음과 같은 일련의 헤더가 있습니다.

grep ">scaffold_3" DM_v6.1_unanchoredScaffolds.fasta 
>scaffold_3
>scaffold_303
>scaffold_31
>scaffold_34
>scaffold_36
>scaffold_37
>scaffold_39
>scaffold_33
>scaffold_300

저는 첫 번째 항목만 선택하고 싶었기 때문에 다음과 같이 시도해 보았습니다.

$ grep ">scaffold_3 " file.fasta 
$
$ grep ">scaffold_3[[:blank:]]" file.fasta 
$
$ grep ">scaffold_3\t" file.fasta 
$
$ grep ">scaffold_3\ " file.fasta 
$
$ grep ">scaffold_3 " file.fasta 
$
$ grep ">scaffold_3[[:space:]]" file.fasta 
$
$ grep ">scaffold_3$" file.fasta 
>scaffold_3

이름 뒤의 문자가 공백, 탭, 줄 바꿈(Windows에서도 가능)일 수 있고 이것이 [[:space:]]작동하지 않는 경우 동의어 대신 정확한 이름을 어떻게 얻을 수 있습니까?

감사해요

답변1

텍스트 뒤에 공백이 없다는 것을 알고 계시다면, 맞습니다 grep ">scaffold_3$".

또는 $큰따옴표 안은 특별하므로 작은따옴표를 사용하고 줄의 시작 부분도 잠그려면 So 또는 를 추가 ^하거나 사용하세요 grep -x.grep '^>scaffold_3$'grep -x '>scaffold_3'

( -x--line-regexp: PATTERN이 전체 줄만 일치하도록 강제합니다.)

줄 끝에 공백이 있을 수 있고 공백을 무시하려면 다음을 수행하십시오.

grep -e '>scaffold_3[[:space:]]*$' 

문자열과 줄 끝 사이의 선택적 공백 수와 일치합니다. (또한 라인의 어디에서 시작하든 일치하는 항목을 허용합니다.)

파일에 Windows 스타일 CRLF 줄 끝이 있을 수 있는 >scaffold_3$경우아니요이렇게 하면 끝에 있는 CR이 패턴과 일치하지 않게 됩니다.

답변2

내가 올바르게 이해했다면 파일의 첫 번째 항목에만 결과가 필요합니다.

해당 문자열과 정확히 일치하는 항목을 찾기 위해 grep을 사용할 수 있습니다.

grep -w ">scaffold_3" file.fasta

관련 정보