如何从OCS ID中提取主机名

时间:2019-05-20 09:06:56

标签: bash

我正在GLPI上修复bash脚本,该脚本显示了一个多月未更新的计算机。输入的数据显示如下:

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

我想通过正则表达式仅获得名称:myhostname01t

我创建了此正则表达式:

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

有了sed,我怎么只能得到名字?

4 个答案:

答案 0 :(得分:1)

简单切割还不够吗?比sed更容易理解。

echo 'myhostname01t-2015-03-09-16-47-42' | cut -d'-' -f1

答案 1 :(得分:0)

自您要求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

答案 2 :(得分:0)

使用以下命令从行尾删除日期时间部分:

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

答案 3 :(得分:0)

如果目的是从存储在一个变量中的OCS ID中提取主机名,然后将其放入另一个变量中,则可以使用纯Bash代码来完成:

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

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

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

有关${ocsid%-*-*-*-*-*-*}的说明,请参见Removing part of a string (BashFAQ/100 (How do I do string manipulation in bash?))