나는 나타나는 첫 번째 숫자까지 문자열의 일부를 추출하는 간단한 방법을 찾고 싶습니다(아마도 문자열을 문자별로 반복하는 대신 정규식을 사용하는 것 같습니다). rpm -qa
버전 없이 패키지 이름을 추출하는 데 이것을 사용하고 있습니다 . 예를 들어:
Parsing: perl-Text-ParseWords-3.30-1.fc22.i686
Result: perl-Text-ParseWords
답변1
선호하는 대안
우리는 간단히rpm 쿼리 수정이름만 출력됩니다.
rpm -qa --queryformat "%{NAME}\n"
아니면 정규 표현식으로 더러워질 수 있습니다.
정확히 "직접"은 아니지만 여기에 트릭을 수행해야 하는 sed 정규식이 있습니다.
sed -e 's/\([^\.]*\).*/\1/;s/-[0-9]*$//' <<< "perl-Text-ParseWords-3.30-1.fc22.i686"
이것은 이름에 마침표가 있는 패키지를 제외한 모든 것을 처리해야 합니다(허용되지 않는다고 생각합니다).
빠른 고장
s/\([^\.]*\).*/\1/
첫 수업 전에 모든 것을 잡아보세요. 그래서perl-Text-ParseWords-3.30-1.fc22.i686
되었다perl-Text-ParseWords-3
s/-[0-9]*$//
후행-
및 첫 번째 버전 번호를 제거합니다. 그래서perl-Text-ParseWords-3
그것은perl-Text-ParseWords
.
답변2
Bash에서 직접:
a='perl-Text-ParseWords-3.30-1.fc22.i686'
r='(^[^0-9]+)'
[[ $a =~ $r ]]
echo "${BASH_REMATCH[1]%?}"