【问题标题】:Bash Cut text from line with different delimitersBash 从具有不同分隔符的行中剪切文本
【发布时间】:2016-12-28 13:18:52
【问题描述】:

我有一个变量,其值如下:

@capability_ids type="list">[LOADBALANCER]</capability_ids>@

并且需要从这个字符串中提取出设备类型(LOADBALANCER)。

我尝试过使用cut,但不知道如何用不同的分隔符编写cut命令。

DeviceType=$( echo $DeviceTypeDirty | cut -d'[' -f1)

enywone 能帮我找到正确的 bash 解决方案吗?

【问题讨论】:

  • 为什么你的字符串在变量中而不是在数组中?你是如何获得数据的?它是从文件还是外部进程获得的?您需要完整的数据,还是只需要显示的值?
  • 好的,我已经编辑了一个问题来简化它。只有方括号内的数据 - LOADBALANCER
  • 我的其他问题仍然存在:您是如何获得数据的?它是从文件还是外部进程获得的,您需要完整数据还是只需要显示的字段?
  • 这个数据是从外部系统获取的,使用ssh请求,我只需要字段。
  • 你将如何使用这些字段?你需要一个一个地处理它们,还是要将它们全部放在一个数组中?

标签: bash delimiter cut


【解决方案1】:

awk 与正则表达式一起使用:awk -F '[\\[\\]]' '{print $2}'

$ echo '@capability_ids type="list">[L3SWITCH]/capability_ids>@'|awk -F '[\\[\\]]' '{print $2}'
$ L3SWITCH

$ DeviceType=$( echo "$DeviceTypeDirty" | awk -F '[\\[\\]]' '{print $2}')

【讨论】:

    【解决方案2】:

    我尝试提取“LOADBALANCER”

    Administrators-MacBook-Pro:~$ echo "\"list\">[LOADBALANCER]   
    </capability_ids>@"|awk -F '[][]' '{print $2}'
    LOADBALANCER
    Administrators-MacBook-Pro:~$ 
    

    希望有帮助!

    【讨论】:

    • 感谢您复制 BigDataLearner 的答案。
    【解决方案3】:

    使用cut

    DeviceTypeDirty="@capability_ids type="list">[LOADBALANCER]</capability_ids>@"
    DeviceType="$(echo "$DeviceTypeDirty" | cut -d'[' -f2 | cut -d']' -f1)"
    

    输出:

    echo "$DeviceType"
    LOADBALANCER
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 2013-11-18
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 2011-05-21
      • 2019-08-29
      相关资源
      最近更新 更多