【问题标题】:Get first characters to a variable获取变量的第一个字符
【发布时间】:2021-04-24 19:58:42
【问题描述】:

我有这样的输出

我需要将 id 65a8fa6 作为新命令的变量。

我熟悉 grep 并使用它来获取我需要的行。但是我如何只选择前 7 个字符。

这就是我现在的位置

vagrant global-status | grep  DB1

输出

65a8fa6  default vmware_desktop running     /Users/USER/Documents/Vagrant/centos7SN/DB1 

【问题讨论】:

  • vagrant global-status | awk '/DB1/{print $1}'。如果 DB1 仅在 / 之后的末尾出现,请使用 /\/DB1$/ 正则表达式
  • 你确定只有一行会用DB1计算吗?

标签: variables awk sed grep centos


【解决方案1】:

第一个解决方案:您可以简单地使用awk 执行此操作。只需在行中查找字符串DB,然后如果找到,则打印该行的第一个字段。将输出保存到变量var 中,稍后您可以使用它。

val=$(vagrant global-status | awk '/DB1/{print $1}')

OR 匹配db1DB1 尝试任何awk

val=$(vagrant global-status | awk '/[dD][bB]1/{print $1}')


第二个解决方案:如果你有 GNU awk 并且你想使用忽略大小写,那么试试:

val=$(vagrant global-status | awk -v IGNORECASE="1" '/DB1/{print $1}')


第三种解决方案:要获取前 7 个字符,请尝试:

但是我如何只选择前 7 个字符。

val=$(vagrant global-status | awk '/[dD][bB]1/{print substr($0,1,7)}')

【讨论】:

    【解决方案2】:

    Sed 替代方案:

    val=$(vagrant global-status | sed -rn 's/(^[[:alnum:]]{7})(.*$)/\1/p')
    

    使用 sed 和正则表达式 (-r) 将 vagrant ... 的输出分成两部分 仅将第一部分的行替换并打印。

    【讨论】:

      【解决方案3】:

      您还可以使用cut 命令来查找您所追求的实例,前提是您要查找的内容附近有一些一致的文本:

      假设您想从以下行中找到Hello

      Hello  here's some text blablablabla
      

      你会发现它在做类似的事情:

      echo Hello  here's some text blablablabla | grep text | cut -d "  " -f 1
      

      应该输出Hello

      【讨论】:

      • 您可能会展示如何获取 id 65a8fa6 作为变量(7 个字符):id=$(vagrant global-status | grep DB1 | cut -c1-7)
      猜你喜欢
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2015-05-21
      • 1970-01-01
      • 2012-04-30
      • 2011-10-29
      • 2020-04-17
      相关资源
      最近更新 更多