【问题标题】:Extract numbers from bash string and save the resut into array从 bash 字符串中提取数字并将结果保存到数组中
【发布时间】:2017-05-12 18:38:22
【问题描述】:

对不起,如果重复,但我找不到它。我有以下外壳字符串

#!/bin/sh
word_1="/dev/sda5 233371648 242774015 9402368 4,5G 82 Linux swap / Solaris"

我需要从中提取所有整数并将其保存到数组中吗? 是否可以在与整数相同的数组中包含 4,5G。如果不是,我可以只提取整数。

【问题讨论】:

  • 您是在使用POSIX shell sh 还是再次使用 shell bash
  • 你有什么尝试
  • 我使用的是 ubuntu 16.4。我认为它是POSIX。它同时具有 /bin/sh 和 /bin/bash。我不知道区别其实很精确。
  • @halim:您能否分享上述输出所需的确切输出?你需要5 作为/dev/sda5 的一部分吗?
  • @Inian。很清楚我需要什么。一个包含所提供字符串中所有数字的数组,即 [233371648 242774015 9402368 82] 我在我的问题中也提到我对整数很好。如果你能做到如下 [233371648 242774015 9402368 4.5 82] 那就更好了。

标签: bash shell


【解决方案1】:

但如果你想要整数但允许k、M、G等,那么试试:

unset a; let i=0; declare -a a ;  for b in $word_1 ; do [[ $b =~ ^-?[0-9,kMG]+$ ]] && a[i++]=$b ; done ; echo ${a[*]}

【讨论】:

  • 感谢您的回答,但是我不能完全理解它,但它可以工作,我希望阵列中也有 4,5G 作为数字,例如 4.5 而不是 4.5G。再次感谢!
【解决方案2】:

这个对我有用:

#!/bin/bash
word="/dev/sda5 233371648 242774015 9402368 4,5G 82 Linux swap / Solaris"
separated=$(echo ${word} | sed -e 's/ /\n/g')
array=$(echo "${separated}" | sed -e '/^[0-9]*$/!d')
echo ${array}
echo "${array}"

第一个 echo 命令在一行中写出所有数字,而第二个命令在不同的行中写出每个数字。 请注意,某些版本的 sed 不支持换行符 '\n'。例如,在 MacOS 上,我必须使用 gsed 来获得相同的功能。

【讨论】:

  • 即使 4.5G 没有被捕获为数组中的数字,它也能完美运行,但我对整数很好。谢谢!你知道为什么当我从 #!/bin/bash 更改为 #!/bin/sh 时出现错误并且脚本不起作用吗?
  • 也许最好,如果你看看这篇文章:stackoverflow.com/questions/5725296/…
猜你喜欢
  • 2017-05-14
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
相关资源
最近更新 更多