grep第三个关键字,由'-';

grep第三个关键字,由'-';,grep,cut,Grep,Cut,在linux中显示hostname命令后,我的主机名详细信息如下 my-host-test-db-10001.dns.biz.xyz.com my-host-test2-db-10002.dns.biz.xyz.com my-host-test3-db-10003.dns.biz.xyz.com 我想从上面的这些字符串中获取第三个字符串(test/test2/test3)。如何实现它?除了使用cut更简单的解决方案外,您还可以使用更灵活的grep: hostname | grep -Po '^

在linux中显示
hostname
命令后,我的主机名详细信息如下

my-host-test-db-10001.dns.biz.xyz.com
my-host-test2-db-10002.dns.biz.xyz.com
my-host-test3-db-10003.dns.biz.xyz.com

我想从上面的这些字符串中获取第三个字符串(test/test2/test3)。如何实现它?

除了使用
cut
更简单的解决方案外,您还可以使用更灵活的
grep

hostname | grep -Po '^[^-]+-[^-]+-\K[^-]+'
例如:

grep -Po '^[^-]+-[^-]+-\K[^-]+' <<< 'my-host-test2-db-10002.dns.biz.xyz.com'
在这里,GNU使用以下选项:
-P
:使用Perl正则表达式。
-o
:仅打印匹配项(每行1个匹配项),而不是整行

\K
:使正则表达式引擎“保留”在
\K
之前匹配的所有内容,而不将其包含在匹配中。具体来说,在打印匹配项时忽略正则表达式的前面部分

另请参见:

hostname | cut-d'-'-f3
test2