我正在GLPI上修复bash脚本,该脚本显示了一个多月未更新的计算机。输入的数据显示如下:
myhostname01t-2015-03-09-16-47-42
我想通过正则表达式仅获得名称:myhostname01t
我创建了此正则表达式:
(.*)-([0-9]{4}.*)
有了sed,我怎么只能得到名字?
答案 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?))。