regex - Sed 捕获组正则表达式
问题描述
我有以下字符串作为输出
Config(1) = ( value1:4000 value2:2000 value3:500 value4:1000)
我想在 bash 中将所有 4 个值捕获到 4 个不同的变量中,我认为最干净的方法是使用正则表达式。我认为为此使用正则表达式的最佳方法是使用 sed。我已经测试了正则表达式,并且可以捕获 value1
value1:(\d+)
使用 sed 我正在尝试基于其他答案:
echo "Config(1) = ( value1:4000 value2:2000 value3:500 value4:1000)" | sed -n 's/^\s*value1\:\(\d\+\)\s\?.*/\1/p'
这不返回任何内容
解决方案
BASH 原生支持正则表达式:
#!/bin/bash
s='Config(1) = ( value1:4000 value2:2000 value3:500 value4:1000)'
pattern='value1:([0-9]+) value2:([0-9]+) value3:([0-9]+) value4:([0-9]+)'
if [[ "$s" =~ $pattern ]]
then
echo "${BASH_REMATCH[1]}"
echo "${BASH_REMATCH[2]}"
echo "${BASH_REMATCH[3]}"
echo "${BASH_REMATCH[4]}"
fi
4000
2000
500
1000
推荐阅读
- git - 无法连接到 GitHub API:org.kohsuke.github.HttpException
- dbus - 如何使用 busctl 设置属性来设置 D-Bus 对象?
- sql - 获取最大计数值
- java - 构建 GraalVM 原生镜像时出错。具有堆限制的 UnsupportedFeatureException
- javascript - 如何确保文件输入是视频而不是 Ajax 中的其他任何内容
- php - 调试 Facebook Pixel 微数据时出错
- r - ggplot 更改网格以适应月度数据
- scala - 如何使用 Scalamock 模拟具有类型参数的类?
- reactjs - 从类组件中删除挂钩时出现错误消息 - 基于角色的访问导航栏
- mysql - 使用python从SQL表中查询数据的用户输入