将行分隔的 grep 结果放入数组中

2023-12-31

我有以下 grep 命令

echo v1.33.4 |  egrep -o '[0-9]{1,3}'

返回:

1
33
4

在 Bash 脚本中,我想将这些行分隔成一个数组。 我尝试将它直接分配给一个变量并对其运行 for 循环。但循环内的回声仅产生第一个数字1


回答问题

如何将行存储到数组中?

当 Bash≥4 时,使用mapfile像这样:

mapfile -t array < <(echo "v1.33.4" |  egrep -o '[0-9]{1,3}')

当 Bash

array=()
while read; do
    array+=( "$REPLY" )
done < <(echo "v1.33.4" |  egrep -o '[0-9]{1,3}')

或者,使用单个read陈述:

IFS=$'\n' read -r -d '' -a array < <(echo "v1.33.4" |  egrep -o '[0-9]{1,3}')

(但请注意,返回码是1).


回答解决(我认为是)您的实际问题:

您有一个存储字符串的变量v1.33.4你想要一个包含数字的数组1, 33 and 4:使用以下内容:

string=v1.33.4
IFS=. read -ra array <<< "${string#v}"

为此,您根本不需要外部实用程序。

另一种可能性(这也将验证字符串的格式,所以我认为这是最适合您的选择)是使用正则表达式:

string=v1.33.4
if [[ "$string" =~ ^v([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]; then
    array=( "${BASH_REMATCH[@]:1}" )
else
    echo >&2 "Error, bad string format"
    exit 1
fi

然后,循环数组的字段:

for field in "${array[@]}"; do
    echo "$array"
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将行分隔的 grep 结果放入数组中 的相关文章

随机推荐

  • mysql检查两列之间的预订重叠时间

    我有一个表预订 其中有两列 job time beg 和 job time end 工作从 8 00 开始一直持续到 16 00 现在我需要确定可用时间是否与给定时间重叠 以便我知道我不想在给定时间内预订时间 我在用 select coun
  • 结构体中的枚举; c 新手

    我想知道使用的语法enum in a struct in C 我见过各种例子struct union enum组合用于创建复杂类型 例如 struct MyStruct enum TYPE 1 TYPE 2 TYPE 3 type unio
  • 从int到向量的隐式转换?

    vector
  • 使用访问器方法设置 iVar?

    最初 我正在研究 pickerData 的设置方式 并想知道为什么不能直接分配它 如 METHOD 002 中 但后来我说我应该真正使用我定义的访问器方法而不是直接设置实例变量 我是否正确理解 METHOD 001 是执行此操作的更好方法
  • 从数据库获取提供商信息时发生错误

    得到错误 System Data ProviderInknownException 从数据库获取提供程序信息时发生错误 这可能是由于实体框架使用了不正确的连接字符串造成的 检查内部异常的详细信息并确保连接字符串正确 gt System Da
  • 以编程方式设置 Mac 菜单栏标题

    如何以编程方式更改 Mac 菜单栏中的应用程序标题 after启动应用程序 我知道我可以在运行程序之前通过 Info plist 文件中的 CFBundleName 设置它 但是 我需要在初始化应用程序后更改它 操作我自己的 Info pl
  • 在 NestJS 应用程序中的 Newrelic 中注释匿名中间件

    我在一个项目中使用 NestJS 带有 Express Server 并尝试优化某些端点的性能 使用 New Relic 我注意到所有端点的响应时间的很大一部分都花费在匿名中间件上 达到 89 在某些点上 有没有办法找出这是哪个中间件 我已
  • Myers diff 算法与 Hunt–McIlroy 算法

    最长的公共子序列问题 https en wikipedia org wiki Longest common subsequence problem这是一个经典的计算机科学问题 解决它的算法是版本控制系统和维基引擎的根源 两个基本算法是亨特
  • React-router-dom v4 中的多个嵌套路由

    我需要在react router dom中使用多个嵌套路由 我正在使用react router dom v4 我有我的 import BrowserRouter as Router Route from react router dom 我
  • 使用具有特定布局的 image.plot

    我正在尝试使用 R 函数来设置复杂的图形排列layout包装的graphics x lt y lt seq 4 pi 4 pi len 27 r lt sqrt outer x 2 y 2 当我只使用用该函数创建的图时image 事情按预期
  • 如何设置文本框输入长度

    使用VB6 在我的表单中使用文本框 我想限制文本框中的输入 因此最大值应为 6 用户最多应输入六个字符 否则应显示错误消息 Button1 click if Length textbox1 text gt 6 then enter only
  • 查找依赖于.NET 3.5 SP1的代码

    有没有办法运行某种代码分析来查找可以使用 NET 3 5 SP1 编译但不能使用 3 5 RTM 编译的代码 FxCop 适用于 SP1 引入的程序集 但对于仅调用新方法和属性的代码 它不会检测该用法 当然 您可以使用 fxcop 或 VS
  • 在 iPhone 中标记 CALayers

    我正在寻找一种通用方法 能够在层次结构中搜索唯一的 CALayer 而不必记住该层在层次结构中的位置 并使用 sublayer 和 superlayer 方法 我知道这对于 UIViews 是可能的 这使得翻转视图变得容易 但是 CALay
  • 如何解决此错误 VFY:无法解析虚拟方法

    我正在使用 android studio 2 0 上次我将 jdk 7 升级到 jdk 8 并对文件 gradle 进行了一些更改 但现在我收到此错误 E InstantRun Could not find slices in APK ab
  • 什么是比较合同?

    我的java代码抛出了以下异常 java lang IllegalArgumentException Comparison method violates its general contract 我研究了 StackOverflow 上的
  • 导入不适用于 tsconfig.json 中的 "module": "ESNEXT"

    我在服务器端有以下代码 import as express from express export class AppRouter private static instance express Router static getInsta
  • Flexbox 换行 - 最后一行的不同对齐方式

    我使用弹性框将两个项目与容器的左侧和右侧对齐 同时将它们垂直居中对齐 这是我想要实现的目标的一个非常简单的例子 HTML div class container div class first div div class second di
  • 如何判断 Delphi 应用程序是否“拥有”其控制台?

    Delphi 控制台应用程序可以从现有控制台窗口的命令行运行 并且可以通过双击其图标来运行 在后一种情况下 它将创建自己的控制台窗口 并在应用程序终止后将其关闭 如何判断我的控制台应用程序是否已创建自己的窗口 我想检测到这一点 以便我可以显
  • 使用 matplotlib + errorbar 进行动画

    我正在尝试根据这个例子制作动画 我的主要问题是我不知道如何将动画与错误栏连接起来 也许有人已经解决了 相似的东西 import numpy as np import matplotlib pyplot as plt import matpl
  • 将行分隔的 grep 结果放入数组中

    我有以下 grep 命令 echo v1 33 4 egrep o 0 9 1 3 返回 1 33 4 在 Bash 脚本中 我想将这些行分隔成一个数组 我尝试将它直接分配给一个变量并对其运行 for 循环 但循环内的回声仅产生第一个数字1