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