나는 grep을 사용하여 파일을 구문 분석하고 있으며 화면의 출력에는 다음과 같은 개행 문자가 포함되어 있습니다.
$ grep 'gene' sequence.gb
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
변수에 할당하고 줄 바꿈을 사용하여 인쇄할 수 있습니다.
$ gene=$(grep 'gene' sequence.gb)
echo "$gene"
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
하지만 여기에는 실제 개행 문자가 포함되지 않습니다. '..'가 포함된 줄을 다시 검색하면 모두 얻을 수 있기 때문입니다.
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
이는 따옴표가 없는 단일 문자열임을 알 수 있습니다.
$ echo $gene
gene 89..1483 /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" gene complement(1987..2763) /gene="nucleocapsid protein" /gene="nucleocapsid protein"
제 질문은 개행 형식을 어떻게 유지하거나 도입할 수 있느냐는 것입니다.
감사해요
답변1
.
이는 정규식 와일드카드이므로 두 grep '..'
개 이상의 문자가 포함된 모든 줄과 일치합니다.
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
정규식에서는 .
정말 말도 안되는 일입니다. 문자나 숫자뿐만 아니라 구두점, 공백, 탭 또는 기타 모든 문자와도 일치합니다.
마침표만 일치시키려면 다음을 사용하십시오 -F
.
$ echo "$gene" | grep -F '..'
gene 89..1483
gene complement(1987..2763)
-F
패턴을 정규 표현식이 아닌 고정 문자열로 처리하도록 --fixed-strings
지시하는 약어입니다 .grep
또는 마침표만 일치하도록 마침표를 이스케이프할 수 있습니다(팁:갭):
$ echo "$gene" | grep '\.\.'
gene 89..1483
gene complement(1987..2763)
grep
또는 마침표를 문자 클래스에 넣어서 마침표를 문자 그대로의 마침표로 처리하도록 강제 할 수 있습니다 (팁:데이브 톰슨):
$ echo "$gene" | grep '[.][.]'
gene 89..1483
gene complement(1987..2763)
그러나 정규식이 필요하지 않은 경우 정규식을 사용 하면 프로세스가 더 빨라 -F
집니다 .grep