설치된 구독과 현재 사용 중인 구독의 종료 날짜를 알고 싶습니다.
subscription-manager list --installed | grep Ends | awk '{print $2 }')
구독이 여러 개인 경우 복잡성이 발생합니다. 이름에 "서버"가 포함된 구독과 일치하는 종료 날짜와 이름을 어떻게 얻을 수 있나요?
+-------------------------------------------+
Installed Product Status
+-------------------------------------------+
Product Name: Red Hat Enterprise Linux Server
Product ID: 69
Version: 7.7
Arch: x86_64
Status: Subscribed
Status Details:
Starts: 27/11/19
Ends: 27/11/20
Product Name: Red Hat Enterprise Linux High Availability for x86_64
Product ID: 83
Version: 7.7
Arch: x86_64
Status: Subscribed
Status Details:
Starts: 27/11/19
Ends: 27/11/20
답변1
단일 작업의 경우 awk
, sed
및 를 결합하는 것이 거의 필요하지 않습니다. grep
귀하의 경우에는 다음이 작동합니다.
subscription-manager list --installed | awk '$2=="Name:" && $0~/Server/ {relevant_section=1;print;} \
$1=="Ends:" && (relevant_section==1) {relevant_section=0;print;}'
그러면 "Product Name:"(또는 공백으로 구분된 두 번째 토큰 )으로 시작하는 줄에 문자열이 포함되어 있는지 relevant_section
알려주는 플래그가 설정됩니다 . 이 줄은 편의상 인쇄되어 있습니다.1
Name:
Server
Ends:
로 시작하는 행과 플래그가 인 경우 1
해당 행을 인쇄하고 플래그를 로 재설정합니다 0
.
종료 날짜만 인쇄하려면 다음과 같이 단축할 수 있습니다.
subscription-manager list --installed | awk '$2=="Name:" && $0~/Server/ {relevant_section=1;} \
$1=="Ends:" && (relevant_section==1) {relevant_section=0;print $2;}'
답변2
이것은 기본적으로 더 짧은 버전입니다.AdminBee 방법:
$ subscription-manager list --installed |
awk '{
if(sub(/^Product Name: */,"")){
a=0;
n=$0;
if(/<Server>/){ a++ }
}
}/Ends/ && a{print n,$2}'
Red Hat Enterprise Linux Server 27/11/20
현재 줄이 로 시작하면 스크립트는 a
매번 재설정하려고 하기 때문에 로 설정하고, 줄에도 문자열이 있으면 로 설정합니다. 그런 다음 현재 줄이 로 시작하고 0이 아닌 경우 두 번째 필드가 인쇄됩니다.0
Product Name:
Server
1
Ends:
a
이는 Product Name:
포함 notAServer
또는 기타 포함된 콘텐츠 와도 일치합니다 Server
. 일치하는 단어만 제한하려면 다음을 사용할 수 있습니다( gawk
GNU awk가 있다고 가정 ).
subscription-manager list --installed |
gawk '{if(sub(/^Product Name: */,"")){a=0; n=$0;if(/\<Server\>/){a++}} }/Ends/ && a{print n,$2}'
답변3
사용밀러
$ tail -n +4 subscriptions | mlr --xtab --ips : --ops ': ' \
filter '${Product Name} =~ "Server"' then cut -f 'Product Name,Ends'
Product Name: Red Hat Enterprise Linux Server
Ends: 27/11/20