我正在修复GLPI上的一个bash脚本,该脚本显示一个多月未更新的计算机。中的数据显示如下:
myhostname01t-2015-03-09-16-47-42我希望通过正则表达式仅获取名称:myhostname01t
我创建了这个正则表达式:
(.*)-([0-9]{4}.*)
使用sed,我如何才能只获取名称?
发布于 2019-05-20 17:10:48
简单的剪裁还不够吗?比sed更容易理解。
echo 'myhostname01t-2015-03-09-16-47-42' | cut -d'-' -f1发布于 2019-05-20 17:14:25
既然您要求使用sed:
$ S="myhostname01t-2015-03-09-16-47-42"
$ sed 's/\(^[^-]\+\).*/\1/' <<<$S
myhostname01t或者使用awk更简单:
$ awk -F- '{print $1}' <<<$S
myhostname01tPerl:
$ perl -F- -lane 'print $F[0]' <<<$S
myhostname01t发布于 2019-05-21 02:04:22
如果目标是从存储在一个变量中的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?))。
https://stackoverflow.com/questions/56217612
复制相似问题