如何在bash中提取文件第一行定义的版本字符串

DDS*_*low -1 bash sed

我想提取在文件第一行中定义的版本字符串.

file.txt的

version="11.22.33" project="foo"
this is a foo project with version "11.22.33" written in some language of version "44.55.66"
Run Code Online (Sandbox Code Playgroud)

我想要一个只读取文件第一行并从中提取11.22.33并停止的命令.

我试过variable_str=$(sed -rn "0,/<pattern_for_version>/p")但这会返回整行,而不仅仅是匹配的模式.

Pau*_*ges 5

为什么会产生另一个过程?

$: IFS="$IFS=" read x version x < file.txt
$: echo "$version"
"11.22.33"
Run Code Online (Sandbox Code Playgroud)

IFS是内部字段分隔符列表,默认情况下包括空格,制表符和换行符.如果添加,=则对文件进行单次读取会将第一行拆分为您要求的多个字段.

版本"11.22.33"project ="foo"

它会将这些分配给提供的变量,所以给它放置你不想要的初始字段以及你想要的字段后面的所有内容,它会将版本值干净地放到你想要它的位置.

如果你没有提供足够的东西,它将把所有未解析的东西留在最后的领域 -

$: echo $x
project="foo"
Run Code Online (Sandbox Code Playgroud)

如果要删除引号,"也要添加到IFS,并为将产生的空字段给出一个位置.要删除单引号,请添加等等...

$: IFS="$IFS='\"" read x x version x < file.txt
$: echo "$version"
11.22.33
Run Code Online (Sandbox Code Playgroud)