LINUX.ORG.RU

bash перестановка символов в строке

 


0

2

Нельзя кодить в пятницу :) Всем спасибо. Вывод был такой

=============================================================================
1-------
Issuer              : OGRN=1234567890123, INN=001234567890, STREET=ул. Сущёвский вал д. 18, C=RU, S=г. Москва, L=Москва, O="ООО ""КРИПТО-ПРО""", CN="Тестовый УЦ ООО ""КРИПТО-ПРО"""
Subject             : CN=
Serial              : 0x7C00201863AC9C83FD13DC6B16000E00201863
SHA1 Hash           : 8c11eedcc4bbe81f713ae4994c76f5052125ded2
SubjKeyID           : 05ec70dfe5b86e1cc6e00a7583405505b705c8ab
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 19/06/2025  09:49:43 UTC
Not valid after     : 19/08/2025  09:59:43 UTC
PrivateKey Link     : Yes
Container           : SCARD\rutoken_lt_3c517c26\0A00\1DA2
Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info       : ProvType: 80, KeySpec: 1, Flags: 0x0
OCSP URL            : http://testgost2012.cryptopro.ru/ocsp2012g/ocsp.srf
OCSP URL            : http://testgost2012.cryptopro.ru/ocsp2012gst/ocsp.srf
CA cert URL         : http://testgost2012.cryptopro.ru/CertEnroll/testgost2012(14).crt
CA cert URL         : http://testgost2012.cryptopro.ru/CertEnroll/testroot.p7b
CDP                 : http://testgost2012.cryptopro.ru/CertEnroll/!0422!0435!0441!0442!043e!0432!044b!0439%20!0423!0426%20!041e!041e!041e%20!0022!041a!0420!0418!041f!0422!041e-!041f!0420!041e!0022(14).crl
CDP                 : http://testgost2012.cryptopro.ru/CertEnroll/testgost2012(14).crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.2
                      1.3.6.1.4.1.311.10.3.12

Задача была получить дату Not valid after и сравнить с текущей. Остановился на коде

certmgr -list -store uMy | awk '/(after)/ {split($5, d, "/"); print d[3] d[2] d[1]}'
20250819


Последнее исправление: tirex2k (всего исправлений: 6)
Ответ на: комментарий от legolegs

Имел в виду, что при первом прочтении не понял. После комментария про длину числа лет стало ясно.

Вообще это не единственная проблема решений с регулярными выражениями и без них в этой теме. Например, нет проверки диапазонов значений. Регулярные выражения предполагают, что месяц и число всегда с ведущим нулём. В общем, тут надо задействовать готовые библиотеки, а из представленного здесь наиболее надёжным кажется date(1).

anonymous
()
Ответ на: комментарий от anonymous

наиболее надёжным кажется date(1).

Парсилка дат в date такая мощная, что нихрена не работает в казалось бы тривиальных случаях:

$ date -d '19/08/2025'
date: invalid date ‘19/08/2025’

В awk такая парсилка тоже есть и тоже не работает.

legolegs ★★★★★
()
Ответ на: комментарий от anonymous

здесь наиболее надёжным кажется date(1)

В date невозможно задать формат для входящей даты и когда он видит aa/bb/yyyy он считает что это US date(mm/dd/yyyy), а у автора это dd/mm/yyyy(что является валидным для кучи локалей). Так что использование date тут вообще не подходит.
Наиболее подходящим в данном случае является использование dateconv из dateutils:

dateconv -i "%d/%m/%Y" -f "%Y%m%d" "01/02/2006"
20060201

arax ★★★
()
Последнее исправление: arax (всего исправлений: 1)