선호하는 대안

선호하는 대안

나는 나타나는 첫 번째 숫자까지 문자열의 일부를 추출하는 간단한 방법을 찾고 싶습니다(아마도 문자열을 문자별로 반복하는 대신 정규식을 사용하는 것 같습니다). 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]%?}"

관련 정보