首页 > 解决方案 > 如何在 SHELL 中使用字符串匹配条件从字符串中提取子字符串

问题描述

我必须从中提取一个子字符串。

- Session establishment complete on server localhost/127.0.0.1:2183, sessionid = 
   0x1000c22ff510020, negotiated timeout = 120000 WATCHER:: WatchedEvent state:SyncConnected 
   type:None path:null [zk: localhost:2183(CONNECTED) 0] addauth digest super:testing [zk: 
   localhost:2183(CONNECTED) 1] ls /live_nodes [rn3-gcs02.rno.foo.com:8985_solr, rn3- 
   gcsb.rno.foo.com:8985_solr] [zk: localhost:2183(CONNECTED) 2]

要提取的子字符串是

[rn3-gcs02.rno.foo.com:8985_solr,rn3-gcsb.rno.foo.com:8985_solr]

它是一个动态子字符串,可以有 2 个或更多元素

标签: bashshell

解决方案


re='ls /live_nodes (\[[^]]+\])'
[[ $s =~ $re ]] && echo "${BASH_REMATCH[1]}"

...发出,您的输入$s

[rn3-gcs02.rno.foo.com:8985_solr, rn3-
   gcsb.rno.foo.com:8985_solr]

推荐阅读