패키지가 포함된 목록을 정리하려고 합니다. 패키지 개정판을 제거하고 패키지 이름만 유지하고 싶습니다.
모든 패키지에는 package-name-majorver-minorver 등의 명명 규칙이 있습니다: openssl-1.0.1e-57.0.5.el6 . -1.0.1e-57.0.5.el6이 아닌 openssl만 원합니다.
나는 지금까지 이것을 가지고 있지만 sed 's/^.*-//'
분명히 작동하지 않습니다.
답변1
패키지 이름에 항상 두 개의 버전 번호 부분이 하이픈으로 구분되어 추가되고 버전 부분에 하이픈이 포함되지 않는 경우 이 명령을 사용할 수 있습니다.
sed 's/-[^-]*-[^-]*$//'
$
이렇게 하면 줄 끝에 있는 두 개의 하이픈( )이 제거됩니다 . 각 하이픈 뒤에는 하이픈이 아닌 문자가 0개 이상 나옵니다. 또한 foo-bar-baz--
예를 들어 다음 foo-bar-baz
과 같이 변경됩니다 .
답변2
패키지 이름에 다음이 포함되지 않은 경우 작동합니다 -
.
sed -r 's/([^-]+).*/\1/'
답변3
알겠습니다. 이것이 최선의 해결책은 아니지만 이것을 찾았습니다.https://stackoverflow.com/a/51153277/5227747, 그래서 해결책은
cat file | sed 's/ // ; s/-/\t/' | rev | cut -f 3- | rev | sed 's/\t/-/'
마지막 두 개의 "-"로 구분된 열을 쉽게 제거합니다. 더 나은 방법을 아는 사람이 있다면 알고 싶습니다.