我有一个包含多行的文本文件,但我知道在一行上有以下内容
name="some_string" value="some_string"
我知道我可以通过cat file.txt|grep "value=\".*\""
来到行,但我不知道只是为了返回括号内的内容。我认为grep只能把它归结为
答案 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)