grep дата и время из текстового файла для новых переменных

Я запустил ssh-add -L, чтобы подтвердить загрузку ключа

 firewall ~ $ ssh-add -L
 ssh-rsa AAAAB3NzaC1yc2EAA.....snip.....VBQ== rsa-key-20170210
 etc...

Затем я побежал ssh -v m4, чтобы посмотреть, что думает SSH... и меня озарило.

 firewall ~ $ ssh m4 -v
 OpenSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
 debug1: Reading configuration data /root/.ssh/config
 debug1: /root/.ssh/config line 11: Applying options for m4
 debug1: Reading configuration data /etc/ssh/ssh_config
 debug1: /etc/ssh/ssh_config line 56: Applying options for *
 debug1: Connecting to m4 [192.168.9.74] port 22.
 debug1: fd 3 clearing O_NONBLOCK
 debug1: Connection established.
 debug1: permanently_set_uid: 0/0
 debug1: identity file /root/.ssh/id_rsa type 1
...snip
 debug1: Enabling compatibility mode for protocol 2.0
 debug1: Local version string SSH-2.0-OpenSSH_6.6.1
 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
 debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
 debug1: SSH2_MSG_KEXINIT sent
 debug1: SSH2_MSG_KEXINIT received
 debug1: kex: server->client aes128-ctr hmac-sha1 none
 debug1: kex: client->server aes128-ctr hmac-sha1 none
 debug1: kex: diffie-hellman-group-exchange-sha256 need=20 dh_need=20
 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<7680<8192) sent
 debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
 debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
 debug1: Server host key: RSA 23:87:00:00:00:00:00:00:N0:N0:N0
 debug1: Host 'm4' is known and matches the RSA host key.
 debug1: Found key in /root/.ssh/known_hosts:1869
 debug1: ssh_rsa_verify: signature correct
 debug1: SSH2_MSG_NEWKEYS sent
 debug1: expecting SSH2_MSG_NEWKEYS
 debug1: SSH2_MSG_NEWKEYS received
 debug1: SSH2_MSG_SERVICE_REQUEST sent
 debug1: SSH2_MSG_SERVICE_ACCEPT received
 debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,keyboard-interactive
 debug1: Next authentication method: gssapi-keyex
 debug1: No valid Key exchange context
 debug1: Next authentication method: gssapi-with-mic
 debug1: Unspecified GSS failure.  Minor code may provide more information
 No Kerberos credentials available (default cache: KEYRING:persistent:0)

 debug1: Unspecified GSS failure.  Minor code may provide more information
 No Kerberos credentials available (default cache: KEYRING:persistent:0)

 debug1: Next authentication method: keyboard-interactive
 Password:  ^C

Эта строка debug1: /root/.ssh/config line 11: Applying options for m4привлекла мое внимание -не должно было быть ничего конкретного для этого хоста.

 Host 10.99.2.23       # m4 drac
    PasswordAuthentication=yes
    PubkeyAuthentication=no

Таким образом, физический хост представляет собой сервер Dell и имеет выделенный порт OOB для доступа к консоли. Dell называет это портом DRAC, и у меня настроена запись DNS для m4-drac

.

DRAC не настроен на использование открытых ключей SSH для аутентификации, поэтому эта конфигурация останавливает попытки. Но конфигурация применялась к имени хоста m4 , потому что она не учитывает хэш.

ОТВЕТ В файле.config ssh не используется хэш в качестве разделителя комментариев.

1
14.10.2019, 17:27
2 ответа

С GNU grep и bash:

filename="S3G_MX_1_EFR____20100203T121015_othernumbers.zip"
timestamp=$( echo "$filename" | grep -oP '(?<=\D)\d{8}T\d{4}' )

, затем

year=${timestamp:0:4};    echo $year      # => 2010
month=${timestamp:4:2};   echo $month     # => 02
day=${timestamp:6:2};     echo $day       # => 03
hour=${timestamp:9:2};    echo $hour      # => 12
minute=${timestamp:11:2}; echo $minute    # => 10

На самом деле подойдет обычный bash (нужна версия 4+)

regex='_([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})'
if [[ $filename =~ $regex ]]; then
    year=${BASH_REMATCH[1]}
    month=${BASH_REMATCH[2]}
    day=${BASH_REMATCH[3]}
    hour=${BASH_REMATCH[4]}
    minute=${BASH_REMATCH[5]}
    echo "$year $month $day $hour $minute"
fi
2010 02 03 12 10
1
27.01.2020, 23:40

Как насчет замены типа

sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/'

Такие шаблоны, как(....)(расширенный синтаксис регулярных выражений ), соответствуют четырем цифрам после шаблона и могут использоваться при замене как \1и последующие. Таким образом, результатом для вашего примера будет

export year=2010 month=02 day=03 hour=12 minute=10

Эти строки могут быть выполнены, например.

$(echo S3G_MX_1_EFR____20100203T121015_othernumbers.zip | sed -E 's/.*S3G_MX_1_EFR____(....)(..)(..)T(..)(..).*/export year=\1 month=\2 day=\3 hour=\4 minute=\5/')
0
27.01.2020, 23:40

Теги

Похожие вопросы