一致するすべての行から部分テキストを抽出する

一致するすべての行から部分テキストを抽出する

証明書の有効期限を見つけるためにサーバーセットでforループを実行しています。各サーバーの cert コマンドの出力は次のとおりです。

line 1
line 2
line 3
Valid From: Tuesday, 29 September 2015 10:40:13 AM To: Friday, 28 September 2018 10:40:13 AM
line 5

目標は、Toの後の日付部分のみを抽出することです。

次のコマンドを使用して動作させることができました

sed -n -e '/Valid/ s/.*\, *//p' |awk '{print $1 " " $2 " " $3 }')"

しかし、問題は、「Valid」のすべての項目を無視し、最後の項目だけを印刷することです。

これは私が実行しているforループです。

for host in `cat /home/MO/server.txt`
do
for qmgr in $(ssh musr@$host dspmq)
do
certexp="$(ssh musr@$host <cert command> <path to cert> |sed -n -e '/Valid/ s/.*\, *//p' |awk '{print $1 " " $2 " " $3 }')"
echo "$host     :       $qmgr      :       $certexp" > out.txt
done
done

出力ファイルは、server.textファイルの最後のサーバーでのみ印刷されます。

アイデアは、ホスト名、qmgr名、および証明書の有効期限を含むファイルを持ち、日付でソートしてからアクションを取ることです。

ベストアンサー1

while read -r host
do
    for qmgr in $(ssh musr@$host dspmq)
    do
        ssh musr@$host <cert command> <path to cert> |
        sed -n "s/ *..:[^,]*$//;/Valid/s/.*\, */$host\t:\t$qmgr\t:\t/p"
    done
done < "/home/MO/server.txt" > out.txt

おすすめ記事