使用bash脚本在两个单引号之间获取一个单词

时间:2014-10-16 14:37:27

标签: bash

我有一个类似于此代码GET="start from '12345' and continue"的字符串,现在我想要做的是从变量GET中提取单引号之间的值,并使用bash脚本将它们存储在变量上。

5 个答案:

答案 0 :(得分:2)

您可以将read与自定义IFS

一起使用
GET="start from '12345' and continue"

IFS="'" read _ b _ <<< "$GET"
echo "$b"
12345

答案 1 :(得分:1)

使用参数扩展:

#!/bin/bash
GET="start from '12345' and continue" 
value=${GET#*\'}
value=${value%\'*}
echo $value

或者,使用数组和$ IFS:

value=$(
    IFS=\'
    arr=($GET)
    echo ${arr[1]}
    )
echo $value

答案 2 :(得分:0)

很多事情都适用于此。尝试: echo $GET | grep -o \'.*\' 提供两个单引号之间的确切内容匹配。如果要将其存储在变量中: myvar=$(echo $GET | grep -o \'.*\')

答案 3 :(得分:0)

由于还没有人提到它,另一种可能性是使用bash正则表达式:

$ re="'([^']*)'"
$ [[ $GET =~ $re ]] && echo "${BASH_REMATCH[1]}"
12345

答案 4 :(得分:0)

如果你想避免使用bashism(即制作POSIX shell),你可以使用sed:

echo "$GET" | sed -n " s,[^']*'\([^']*\).*,\1,p "
12345

(BTW我的首选解决方案是来自Tom Fenech的解决方案)