所以我花了几个小时看类似的文章
我有一个行,我想保留开始,然后手术分离匹配模式后,到字符串的末尾。
例如,这里是原始行(很容易只关注一行):
ltm pool gateway_ping { description "healthcheck pool" load-balancing-mode least-connections-node members { 10.100.100.4:icmp { address 10.100.100.4 session monitor-enabled state up } server2name:https { address 1.1.1.1 session monitor-enabled state up } } monitor Pingmonitor这缩短并隔离了这个名字,就像我在努力:
cat config.txt | sed -e 's/^ltm \(pool .*\) { .*members { /\1 members /'
给我这个:
pool gateway_ping members 10.100.100.4:icmp { address 10.100.100.4 session monitor-enabled state up } server2name:https { address 1.1.1.1 session monitor-enabled state up } } monitor Pingmonitor现在,将结果传递到另一个sed,并以某种方式消除每个大括号实例之间的任何内容。
{ address 10.100.100.4 session monitor-enabled state up }
{ address 1.1.1.1 session monitor-enabled state up }补充如下:
| sed -e 's/{ address .* } / /g'
最后,我理发了,第一次比赛是正确的,但把其他的都吹掉了:
pool gateway_ping members 10.100.100.4:icmp monitor Pingmonitor }我真的需要那里的其他成员--这句话应该是:
pool gateway_ping members 10.100.100.4:icmp server2name:https monitor Pingmonitor }我可以摆脱监督屏}我只是被困在如何不让SED贪婪和吹熄所有的比赛到最后的支柱.我想让它停在第一根支撑处.然后继续单独匹配。
我想我可能是通过描述它来谋杀这个的。希望我没有失去观众:-)
发布于 2022-02-12 00:47:23
使用sed
$ sed 's/[^ ]* \([^{]*\).*\(members\) {\([0-9.]*[^{]*\)[^}]*}\([^{]*\).*} \(}\)\(.*\)/\1\2\3\4\6 \5/' file
pool gateway_ping members 10.100.100.4:icmp server2name:https monitor Pingmonitor }发布于 2022-02-12 14:36:30
var='ltm pool gateway_ping { description "healthcheck pool" load-balancing-mode least-connections-node members { 10.100.100.4:icmp { address 10.100.100.4 session monitor-enabled state up } server2name:https { address 1.1.1.1 session monitor-enabled state up } } monitor Pingmonitor'
# with GNU awk
awk -F' *{ *' '
/^ltm pool/{
$0 = gensub(/^ltm (pool \w+) .* (members) {/, "\\1 \\2", "1")
for(i=2; i<=NF-1; i++) sub(/.* /, "", $i)
sub(/ address.*} }/, "")
}
($1=$1)
' <<<"${var}"
### output:
pool gateway_ping members 10.100.100.4:icmp server2name:https monitor Pingmonitor
# with GNU sed
sed -nE '
s/ \{ address( \S+){5} \}//g
s/ +\}//;s/^ltm (pool \S+) \{ .* (members) \{/\1 \2/p
' <<<"${var}"
### output:
pool gateway_ping members 10.100.100.4:icmp server2name:https monitor Pingmonitor这些对你有帮助吗?如果你想的话,我可以回来编辑答案,并给出一些解释。
https://stackoverflow.com/questions/71087322
复制相似问题