sed를 사용하여 버전 번호를 얻는 방법

sed를 사용하여 버전 번호를 얻는 방법

sed를 사용하여 버전 번호를 얻는 방법

r-blob-1.0.2-abcsomething
urllib3-2.1.4-xyzsomething
cfile-8.0-dddsomething

"sed"를 사용하여 -있는 부분을 잘라 [0-9]내고 - 버전 이후 끝 부분을 자르는 방법을 알고 난 후 자르기를 시작하려면 어떻게 시작해야 할지 모르겠습니다.

원하는 출력은 다음과 같아야 합니다.

1.0.2
2.1.4
8.0

답변1

버전 번호가 끝에서 두 번째 대시와 마지막 대시 사이에 있는 것으로 알려진 경우 간단한 방법을 사용할 수 있습니다.

sed 's/.*-\(.*\)-.*/\1/'

그러면 문제가 해결될 것입니다.

답변2

$ sed -E 's/.*-([[:digit:]]+(\.[[:digit:]]+)+)-.*/\1/' file
1.0.2
2.1.4
8.0

버전 번호는 둘 사이에 포함되며 -양의 정수( [[:digit:]]+)와 점, 또 다른 양의 정수(최소 한 번( (\.[[:digit:]]+)+))로 구성됩니다. 이를 일치시키고 대시 사이의 문자열을 캡처합니다. 전체 줄이 캡처된 그룹으로 대체됩니다.

확장 표현식 대신 표준 기본 정규 표현식을 사용하세요.

sed 's/.*-\([[:digit:]]\{1,\}\(\.[[:digit:]]\{1,\}\)\{1,\}\)-.*/\1/' file

숫자와 점만 포함된 대시 사이의 모든 선을 잡는 빠르고 더러운 변형입니다.

sed -E 's/.*-([[:digit:].]+)-.*/\1/' file

답변3

--숫자를 구분하는 하나 또는 두 개의 점으로 사이의 부분을 가져옵니다 .

sed -En 's/.*-([0-9]+\.)([0-9]+\.)?([0-9]+)-.*/\1\2\3/p' file

일치하는 줄에 -n플래그와 …/p버전 전용 문자열을 사용하세요.그리고버전 번호를 인쇄하세요. 행에 일치하는 버전 문자열이 없으면 아무 것도 인쇄되지 않습니다.

(지금까지) 다른 답변은 일치하는 항목이 없으면 입력 줄을 인쇄합니다. 이 상황에 대한 예를 제공하지 않았으므로 출력이 어떻게 표시되는지 명확하지 않습니다.

답변4

다음 명령을 사용하여 테스트하면 훌륭하게 작동합니다.

sed -e "s/.*[a-z][0-9]\?-//g" -e "s/-.*//g" filename

산출

1.0.2
2.1.4
8.0

Python 코드를 사용하여 테스트

#!/usr/bin/python
import re
k=open('filename','r')
h=re.compile(r'(-([0-9]\.?){1,4})')
for i in k:
    u=re.search(h,i)
    print u.group().replace("-","")



output

 python e.py 
1.0.2
2.1.4
8.0

관련 정보