提取字符串的2个部分

时间:2018-07-13 18:04:03

标签: string bash extract cut

我有一个字符串,其中包含命令的输出,如下所示:

max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')

现在我需要在两个单独的字符串中分别提取“ 2.5 MBit / s”和“ 16.7 MBit / s”。

这语言是bash。

3 个答案:

答案 0 :(得分:2)

with awk:

string1=$(echo "max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')" | awk -F"'" '{print $2}')
string2=$(echo "max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')" | awk -F"'" '{print $4}')

切边:

string1=$(echo "max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')" | cut -d"'" -f2)
string2=$(echo "max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')" | cut -d"'" -f4)

无论哪种方式,我们都只是将字符串用单引号引起来,并抓住第二和第四字段。

答案 1 :(得分:2)

bash中类似,而无需启动任何外部程序:

yourString="max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')"

IFS="'" read _ rate1 _ rate2 _ <<< "$yourString"

echo $rate1
2.5 MBit/s

echo $rate2
16.7 MBit/s

我将IFS(输入字段分隔符)设置为单引号,然后使用不需要的字段将read放入称为_的虚拟(未使用)变量中。

答案 2 :(得分:1)

使用正则表达式:

x="max. bit rate:      ('2.5 MBit/s', '16.7 MBit/s')"
[[ $x =~ .*\'(.*)\'.*\'(.*)\'.* ]] && echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]}"

输出:

2.5 MBit/s 16.7 MBit/s