
그래서 저는 쉘(구체적으로는 bash)을 처음 사용하고 DNA 서열이 포함된 파일을 보다 유용한 형식으로 변환하는 스크립트를 작성하는 중입니다. 불행하게도 이러한 파일 중 상당수에는 정보 레이블 지정 등에 사용되는 불필요한 줄이 포함되어 있습니다. 특수 문자, 숫자 또는 공백이 포함된 이러한 줄을 제외하는 sed 명령이 필요합니다. 다음을 사용하여 공백이 있는 줄을 제거하는 것이 매우 간단하다는 것을 알았습니다.
sed '/ /d' infile
숫자가 포함된 줄을 제거하는 것은 정규식을 사용하는 것과 유사한 전략이 될 것이라고 생각합니다. 나는 sed에서 특수 문자에 접근하는 방법을 실제로 찾지 못했습니다.
감사해요
답변1
^
완전히 알파벳 문자로 구성되지 않은 줄을 삭제하려면 시작( ) 및 끝( $
) 앵커를 추가해야 합니다.
sed '/^[[:alpha:]]*$/!d' file
대신, 알파벳이 아닌 문자가 하나 이상 포함된 줄을 삭제할 수 있습니다.
sed '/[^[:alpha:]]/d' file
여기서는 캐럿이 ^
이전 표현식의 앵커 역할이 아닌 부정 연산자 역할을 한다는 점에 유의하세요.
또는 grep의 전체 줄( -x
또는 --line-regexp
) 옵션을 사용하여
grep -x '[[:alpha:]]*' file
(첫 번째 sed 표현식과 동일) 또는 역 일치 사용( -v
)
grep -v '[^[:alpha:]]' file
(두 번째 sed 표현식과 동일)
답변2
OP 댓글에서 가져온 답변
나는 그것을 알아냈다고 생각합니다. 나는 단순히 my를
sed
다음과 같이 보이도록 변경했습니다sed '/[[:alpha:]]//!d' infile
. 논리가 다음과 같다면 다음을 제외한 모든 내용을 포함하는 모든 줄을 제외해야 합니다.[A-Za-z]