如何在bash中返回单个字符串?

时间:2014-09-09 21:47:17

标签: regex bash

我有一个包含多行的文本文件,但我知道在一行上有以下内容

name="some_string" value="some_string"

我知道我可以通过cat file.txt|grep "value=\".*\""来到,但我不知道只是为了返回括号内的内容。我认为grep只能把它归结为

2 个答案:

答案 0 :(得分:3)

将GNU grep用于-P(PCRE)选项和-o选项仅打印匹配的部分。

grep -oP '(?<=value=")[^"]+' file

答案 1 :(得分:1)

如果您的正则表达式包含分组运算符,则可以使用=~BASH_REMATCH

regex='value="([^"]+)"'
[[ $string =~ $regex ]] && result=${BASH_REMATCH[1]}

这适用于没有GNU grep的系统(如MacOS)。


另一种类似在仅使用POSIX grep的系统上工作的方法是使用参数扩展来过滤grep在本机bash中的输出:

while read -r; do
  value=${REPLY#*'value="'}
  value=${value%'"'*}
  echo "$value"
done < <(grep -e 'name="foo"' file)