문자열에 기호(_)가 여러 번 나타날 때 특정 기호 뒤의 마지막 숫자만 제거 [닫기]

문자열에 기호(_)가 여러 번 나타날 때 특정 기호 뒤의 마지막 숫자만 제거 [닫기]

텍스트 파일에 문자열 목록이 있습니다.

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

관련 정보