首页 > 解决方案 > 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'

这不返回任何内容

标签: regexbashsed

解决方案


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

推荐阅读