"chr1"로 시작하는 항목을 제거하고 "chr11" 또는 "chr19"로 시작하는 항목을 유지하려면 어떻게 grep합니까?

"chr1"로 시작하는 항목을 제거하고 "chr11" 또는 "chr19"로 시작하는 항목을 유지하려면 어떻게 grep합니까?

다음과 같은 항목이 포함된 파일이 있습니다.

chr1    740678  740720
chr1    2917480 2917507

or로 시작하는 항목을 제거하고 or 등 으로 시작하는 항목은 chr1유지하고 싶습니다 . 그것을 사용하면 chr11 또는 chr19로 시작하는 다른 모든 항목이 제거됩니다. 사용할 수 있는 다른 정규 표현식이 있나요?chr11chr19grep -v "chr1"

답변1

먼저, 첫 번째 문자열을 포함하지만 첫 번째 문자열이 아닌 줄을 ^chr1찾는 것을 피하기 위해 줄의 시작 부분( )에만 일치하도록 정규식을 고정해야 합니다 (예를 들어 주석이 달린 VCF 파일에서 쉽게 발생할 수 있음). 다음으로 (GNU) 옵션을 chr1사용할 수 있습니다 .-wgrep

   -w, --word-regexp
          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.   This  option
          has no effect if -x is also specified.

이를 지원 하지 않으면 grep다음을 사용하십시오.

grep -v '^chr1\s' file

공백(탭 및 공백 포함) 과 일치하므로 \s공백 문자로 시작하고 chr1그 뒤에 공백 문자가 오는 모든 줄은 제외됩니다.

답변2

chr1 뒤에 공백이나 탭이 있는 것 같습니다. chr1따라서 , 뒤에 공백 문자를 검색할 수 있습니다 . 이 시도:

grep -v "chr1\s\+"

관련 정보