Как извлечь имя хоста из идентификатора OCS - PullRequest
0 голосов
/ 20 мая 2019

Я исправляю bash-скрипт в GLPI, который отображает машины, которые не обновлялись более месяца.Данные отображаются следующим образом:

myhostname01t-2015-03-09-16-47-42

Я хотел бы через регулярное выражение получить только имя: myhostname01t

Я создал это регулярное выражение:

(.*)-([0-9]{4}.*)

С помощью sed я могу получить только имя?

Ответы [ 4 ]

0 голосов
/ 20 мая 2019

Если цель состоит в том, чтобы извлечь имя хоста из идентификатора OCS, хранящегося в одной переменной, и поместить его в другую переменную, то это можно сделать с помощью чистого кода Bash:

ocsid='parta-1234-partb-2015-03-09-16-47-42'

hostname=${ocsid%-*-*-*-*-*-*}

printf 'hostname=%s\n' "$hostname"

См. Удаление части строки (BashFAQ / 100 (Как мне манипулировать строками в bash?)) для объяснения ${ocsid%-*-*-*-*-*-*}.

0 голосов
/ 20 мая 2019

Так как вы запросили sed:

$ S="myhostname01t-2015-03-09-16-47-42"

$ sed 's/\(^[^-]\+\).*/\1/' <<<$S
myhostname01t

или даже проще с awk:

$ awk -F- '{print $1}' <<<$S
myhostname01t

Perl:

$ perl -F- -lane 'print $F[0]' <<<$S
myhostname01t
0 голосов
/ 20 мая 2019

Удалить часть даты и времени из конца строки, используя следующую команду:

sed 's/\(-[0-9]*\)\{6\}$//'

С GNU sed:

sed -E 's/(-[0-9]*){6}$//'

Примеры:

$ cat file
server1-2015-02-02-10-04-31
pt-usermachine-2015-01-30-10-59-01
$ 
$ sed 's/\(-[0-9]*\)\{6\}$//' file
server1
pt-usermachine
$ 
$ var=pt-usermachine-2015-01-30-10-59-01
$ 
$ sed 's/\(-[0-9]*\)\{6\}$//' <<< "$var"
pt-usermachine
0 голосов
/ 20 мая 2019

Простого разреза недостаточно? Легче понять, чем седь.

echo 'myhostname01t-2015-03-09-16-47-42' | cut -d'-' -f1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...