问题描述
在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) 中获取第三个字符串。我怎样才能实现它?
解决方法
除了使用 with `project.dataset.table` as (
select '{"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}' json union all
select '{"fruit":{"apples":"1","oranges":"15"}}' union all
select '{"fruit":{"apples":"5","oranges":"1"}}' union all
select '{"fruit":[{"lettuce":"7","kale": "8"}]}'
)
的更简单的解决方案外,您还可以使用更灵活的 cut
:
grep
例如:
hostname | grep -Po '^[^-]+-[^-]+-\K[^-]+'
输出:
grep -Po '^[^-]+-[^-]+-\K[^-]+' <<< 'my-host-test2-db-10002.dns.biz.xyz.com'
此处,GNU grep
使用以下选项:test2
:使用 Perl 正则表达式。-P
:仅打印匹配项(每行 1 个匹配项),而不是整行。
-o
:使正则表达式引擎“保留”它在 \K
之前匹配的所有内容,而不将其包含在匹配中。具体来说,在打印匹配时忽略正则表达式的前面部分。