텍스트 파일에 문자열 목록이 있습니다.
AY498934.1_cds_AAS79865.1_1_1
AY498934.1_cds_AAS79865.1_1_2
AY498934.1_cds_AAS79865.1_1_3
마지막 "_" 이후의 내용을 모두 삭제하고 싶습니다.
예상 결과:
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
답변1
sed 's/_[^_]*$//' < file
교체 뒤에 ( ) 이외의 _
0개 이상의 ( *
) 문자가 오고 줄 끝이 _
[^_]
$
옵니다 .아무것도 없다.
답변2
또 다른 접근 방식은 다음과 같습니다.
sed -nr 's/(.*)_.*/\1/p' file
모든 문자(가장 긴 일치 문자열)를 (\1이라고 함)까지 일치시킨 _
다음 줄의 나머지 부분까지 일치시키고 이를 그룹 \1로 바꿉니다.
-r 매개변수가 없으면 역참조(예: \1)가 작동하지 않습니다.
-n 옵션은 모든 sed 명령이 실행된 후 패턴 공간에 있는 모든 항목의 일반 인쇄를 끕니다.
cat file
AY498934.1_cds_AAS79865.1_1_1
AY498934.1_cds_AAS79865.1_1_2
AY498934.1_cds_AAS79865.1_1_3
sed -nr 's/(.*)_.*/\1/p' file
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1
AY498934.1_cds_AAS79865.1_1