developer tip

"|"를 사용하여 grepping

copycodes 2020. 10. 9. 11:20
반응형

"|"를 사용하여 grepping 대체 연산자


다음은 AT5G60410.gff라는 큰 파일의 샘플입니다.

Chr5    TAIR10  gene    24294890    24301147    .   +   .   ID=AT5G60410;Note=protein_coding_gene;Name=AT5G60410
Chr5    TAIR10  mRNA    24294890    24301147    .   +   .   ID=AT5G60410.1;Parent=AT5G60410;Name=AT5G60410.1;Index=1
Chr5    TAIR10  protein 24295226    24300671    .   +   .   ID=AT5G60410.1-Protein;Name=AT5G60410.1;Derives_from=AT5G60410.1
Chr5    TAIR10  exon    24294890    24295035    .   +   .   Parent=AT5G60410.1
Chr5    TAIR10  five_prime_UTR  24294890    24295035    .   +   .   Parent=AT5G60410.1
Chr5    TAIR10  exon    24295134    24295249    .   +   .   Parent=AT5G60410.1
Chr5    TAIR10  five_prime_UTR  24295134    24295225    .   +   .   Parent=AT5G60410.1
Chr5    TAIR10  CDS 24295226    24295249    .   +   0   Parent=AT5G60410.1,AT5G60410.1-Protein;
Chr5    TAIR10  exon    24295518    24295598    .   +   .   Parent=AT5G60410.1

grep을 사용하여 특정 줄을 추출하는 데 문제가 있습니다. 세 번째 열에 지정된 "gene"유형 또는 "exon"유형의 모든 줄을 추출하고 싶었습니다. 이것이 작동하지 않을 때 나는 놀랐습니다.

grep 'gene|exon' AT5G60410.gff

결과가 반환되지 않습니다. 내가 어디로 잘못 갔습니까?


이스케이프해야합니다 |. 다음이 작업을 수행해야합니다.

grep "gene\|exon" AT5G60410.gff

기본적으로 grep은 이스케이프되지 않는 한 일반 특수 문자를 일반 문자로 취급합니다. 따라서 다음을 사용할 수 있습니다.

grep 'gene\|exon' AT5G60410.gff

그러나 다음 양식을 사용하여 예상 한 작업을 수행하여 모드를 변경할 수 있습니다.

egrep 'gene|exon' AT5G60410.gff
grep -E 'gene|exon' AT5G60410.gff

이것은 몇 가지 선택에 대한 다른 방법입니다.

grep -e gene -e exon AT5G60410.gff

-e스위치 지정 다른 패턴이 일치합니다.


이것은 작동합니다 :

grep "gene\|exon" AT5G60410.gff

정규식에서 대체 연산자를 사용 하는 명령에 파이프 명령포함하는 특정 문제를 검색하는 동안이 질문을 찾았 grep으므로 더 전문적인 답변을 제공 할 것이라고 생각했습니다.

내가 직면 한 오류 는 grep 정규식 |의 대체 연산자 (즉, |파이프 연산자와 동일 )가 아닌 이전 파이프 연산자 (예 :)에서 발생한 것으로 밝혀졌습니다 . 나에게 대답 은 문제가 교대 연산자와 관련된 내 grep 정규식에 있다고 가정하기 전에 &와 같은 필요한 특수 쉘 문자 로 적절하게 이스케이프하고 인용하는 것이 었습니다.

예를 들어 로컬 컴퓨터에서 실행 한 명령은 다음과 같습니다.

get http://localhost/foobar-& | grep "fizz\|buzz"

이 명령으로 인해 다음 오류가 발생했습니다.

-bash: syntax error near unexpected token `|'

이 오류는 내 명령을 다음으로 변경하여 수정되었습니다.

get "http://localhost/foobar-&" | grep "fizz\|buzz"

&큰 따옴표로 문자 를 이스케이프하여 문제를 해결할 수있었습니다. 대답은 대체 작업과 전혀 관련이 없습니다.

참고 URL : https://stackoverflow.com/questions/6775904/grepping-using-the-alternative-operator

반응형