【问题标题】:multiple substitutions on a string in bash [duplicate]bash中字符串的多次替换[重复]
【发布时间】:2014-09-23 13:46:42
【问题描述】:

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

inet="inetnum:        10.19.153.120 - 10.19.153.127"

我想将此字符串转换为以下符号:

10.19.153.120 10.19.153.127

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

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

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

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      bash 中也使用正则表达式:

      [[ $inet =~ ([0-9].*)\ -\ ([0-9].*)$ ]] && newinet=${BASH_REMATCH[@]:1:2}
      

      正则表达式可能更健壮,但应捕获示例字符串中的两个 IP 地址。这两个捕获组分别位于数组参数BASH_REMATCH 的索引1 和2,并分配给参数newinet

      【讨论】:

        猜你喜欢
        • 2017-01-21
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-10
        • 2016-09-13
        相关资源
        最近更新 更多