bash中字符串的多个替换

bash中字符串的多个替换,bash,Bash,我有一个名为inet的变量,其中包含以下字符串: inet="inetnum: 10.19.153.120 - 10.19.153.127" 我想将此字符串转换为以下符号: 10.19.153.120 10.19.153.127 我可以通过sed的/^inetnum://;轻松实现这一点;s/^-/',但我更喜欢更紧凑/优雅的解决方案,并使用bash。嵌套参数展开也不起作用: $ echo ${${inet//inetnum: /}// - / } bash: ${${inet

我有一个名为
inet
的变量,其中包含以下字符串:

inet="inetnum:        10.19.153.120 - 10.19.153.127"
我想将此字符串转换为以下符号:

10.19.153.120 10.19.153.127
我可以通过
sed的/^inetnum://;轻松实现这一点;s/^-/'
,但我更喜欢更紧凑/优雅的解决方案,并使用bash。嵌套参数展开也不起作用:

$ echo ${${inet//inetnum: /}// - / }
bash: ${${inet//inetnum: /}// - / }: bad substitution
$ 

还有其他建议吗?或者这次我应该使用
sed
吗?

一次只能进行一次替换,因此需要分两步进行:

newinet=${inet/inetnum: /}
echo ${newinet/ - / }

bash
中也使用正则表达式:

[[ $inet =~ ([0-9].*)\ -\ ([0-9].*)$ ]] && newinet=${BASH_REMATCH[@]:1:2}
正则表达式可能更健壮,但应该捕获示例字符串中的两个IP地址。这两个捕获组分别位于数组参数
BASH_REMATCH
的索引1和索引2处,并分配给参数
newinet