sed 특정 줄 삭제

sed 특정 줄 삭제

sed를 사용하여 NM으로 시작하는 문자열을 삭제하는 방법은 무엇입니까?

입력 파일

NF
NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
HPSE2, EX8-9DEL
HPSE2, EX3DEL
NM_021828.5(HPSE2)

결과물 파일

NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
NM_021828.5(HPSE2)

이 방법은 제가 원하는 방법이 아닙니다. ^는 시작과 역방향을 의미하기 때문입니다. 최적화 방법을 알려주세요. 감사합니다.

sed -r '/^[^NM]/d' input_file 

답변1

$ sed '/^NM/!d' input_file
NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
NM_021828.5(HPSE2)

!일치를 무효화 하므로 이 sed 스크립트는 일치하는 모든 줄을 삭제합니다.아니요첫 번째 NM. man sed(GNU 버전) 에서 :

주소(또는 주소 범위) 뒤와 명령 앞에 ! a를 삽입할 수 있습니다. 이는 주소(또는 주소 범위)가 일치하지 않는 경우에만 명령이 실행되도록 지정합니다.

주소("NM"으로 시작하는 줄)는 어디에 /^NM/!d있고 명령은 (삭제)입니다./^NM/d


그런데 ^정규식에서는 부정(또는 용어의 반전)만 의미합니다.대괄호 표현식 안의 첫 번째 문자인 경우. [^NM]"N 뒤에 M이 오는 모든 문자"가 아니라 "N 또는 M이 아닌 모든 문자와 일치"를 의미합니다 .

답변2

다른 도구를 사용해도 괜찮다면 사용해 보세요.grep

grep -e '^NM' input_file

또는awk

awk '/^NM/{print}' input_file

리뷰에서 권장하는 대로 다음을 사용할 수 있습니다 awk.

awk '/^NM/' input_file

관련 정보