![문자열에 기호(_)가 여러 번 나타날 때 특정 기호 뒤의 마지막 숫자만 제거 [닫기]](https://linux55.com/image/166525/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%97%90%20%EA%B8%B0%ED%98%B8(_)%EA%B0%80%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%EB%82%98%ED%83%80%EB%82%A0%20%EB%95%8C%20%ED%8A%B9%EC%A0%95%20%EA%B8%B0%ED%98%B8%20%EB%92%A4%EC%9D%98%20%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%88%AB%EC%9E%90%EB%A7%8C%20%EC%A0%9C%EA%B1%B0%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
텍스트 파일에 문자열 목록이 있습니다.
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