這是我試圖獲得Kafka版本的方法
我試圖獲得Kafka版本。
rpm -qa | grep "^kafka_"/span>
kafka_2_6_5_0_292-1.0.0.2.6.5.0-292.Noarch
Kafka的版本是1.0 ,所以我做了以下作業,以削減Kafka的版本
rpm -qa | grep "^kafka_" | sed s'/-/ /g' | awk '{print 2}' | cut -c 13
1.0 <----- result
上面的cli似乎不是那么優雅和長的語法
。我們能否做得更好,也許用Perl或Python的單行命令?
uj5u.com熱心網友回復:
你可以使用單一的awk:
rpm -qa | |
awk -F- '/^kafka_/ && split($2, a, /./) >= 1 {print a[1] " ." a[2]}'
1.0
uj5u.com熱心網友回復:
重構你的代碼
rpm -qa | grep "^kafka_"/span> | sed s'/-/ /g' | awk '{print 2}' | cut -c 1-3
第1步:使用AWK的FS(Field Seperator)代替sed中的預處理。
rpm -qa | grep "^kafka_" | awk 'BEGIN{FS="-"}{print 2}' | cut -c 1-3
第二步:注冊{print $2}動作到匹配描述的行,而不是用grep
rpm -qa | awk 'BEGIN{FS="-"}/^kafka_/{print $2}' | cut -c 1-3
第三步:使用AWK的substr函式來代替cut -c
rpm -qa | awk 'BEGIN{FS="-"}/^kafka_/{print substr($2, 1,3)}'
免責宣告:我的答案假定你想要的行為與你的原始代碼完全一樣,即使可能出現意外,即它確實得到了版本部分的前3個字符,不管第二部分有多少個數字,所以對于1.15.0.2.6.0-292它確實產生1.1
uj5u.com熱心網友回復:
用你顯示的樣本,請嘗試以下awk代碼。簡單的解釋是,將rpm -qa命令的輸出作為標準輸入發送到awk代碼。在awk程式中設定欄位aeparator為-或.,OFS為.。然后在主程式中檢查是否有一行從kafka_開始,然后按照顯示的樣本列印它的第二和第三欄位。
rpm -qa | awk -F'-|.' 'BEGIN{OFS=" 。} /^kafka_/{print $2,$3}'
uj5u.com熱心網友回復:
這個sed有用嗎?
rpm -qa | grep '^kafka_' | sed 's/[a-z0-9_]*-(...).*/1/'
uj5u.com熱心網友回復:
if k=$(rpm -qa | grep "^kafka_"/span>)
然后
if [[ ${k#*-} =~ ^[0-9] [. ] [0-9] ]]
然后
k_version=$BASH_REMATCH。
else
echo "無法從'$k'確定kafka版本"。
fi
else
echo "No kafka in rpm"
fi
這里的想法是洗掉版本字串中到破折號為止的所有內容,然后使用regexp來獲取版本部分。
uj5u.com熱心網友回復:
這完全可以用(GNU)grep來完成。
grep -oP '^kafka_[^-]*-Kd .d '/span>
例如,
$ echo kafka_2_6_5_0_292-1.0.0.2.6.5.0-292.noarch| grep -oP '^kafka_[^-]*-Kd .d '
1.0
但是,既然你問的是Perl或Python,
perl -ne'print "$&
" if /^kafka_[^-]*-Kd .d /'
uj5u.com熱心網友回復:
請注意,許多關于軟體包的工具以不同的格式回傳資料。
rpm命令是一個工具,在不同的工具版本和系統(GNU/Linux,AIX......)之間,輸出結果是不同的。
因此,當你在腳本中使用rpm命令時,千萬不要單獨使用-q選項。
使用--queryformat(簡稱--qf,有兩個-)來指定輸出。
更多資訊請參見man rpm。
示例:
$ rpm -q --qf "%{NAME}:%{VERSION}"/span> firefox
firefox:91.0.1
標簽是這樣指定的。%{...}
標簽名稱可以通過rpm --querytags命令獲得。
以不知道/不完整的軟體包名稱為例:
"| grep '^kernel' kernel-srpm-macros:1.0 kernel-headers:5.13.3 kernel-core:5.13.12 kernel-modules:5.13.12 內核:5.13.12 kernel-modules-extra:5.13.12注意:
用來分隔所有軟體包的'name:version'夫婦
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311342.html
標籤:
上一篇:無法識別Perl模塊
下一篇:嵌套Perl物件的JSON化
