![Grep이 공백이 있는 문자열을 검색하지 않습니다.](https://linux55.com/image/198445/Grep%EC%9D%B4%20%EA%B3%B5%EB%B0%B1%EC%9D%B4%20%EC%9E%88%EB%8A%94%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 파일에는 다음과 같은 일련의 헤더가 있습니다.
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