过滤匹配的内容
Filtering matched content
我想在与内容匹配后过滤所有内容,并在“.”之后带上第一个值
我有这样的输出:
输出:
product: 13.6.0.35_0
更具体地说,我只需要前两位数字和点后的第一位数字,记住我们不应该坚持问题中的价值观,而应该坚持过滤内容的方法。
预计:
13.6
我试过类似的方法:
echo "product: 13.6.0.35_0" | grep -ow '\w*13\w*'
如果需要在当前逻辑下使用grep
,可以使用
echo "product: 13.6.0.35_0" | grep -ow '13\.[0-9]*' | head -1
其中 13\.[0-9]*
匹配 13
、.
和零个或多个数字(由于 w
选项作为整个单词)并且 head -1
获得第一个匹配。
您也可以使用 sed
或 awk
:
sed -En 's/.* ([0-9]+\.[0-9]+).*//p' <<< "product: 13.6.0.35_0"
awk -F'[[:space:].]' '{print "."}' <<< "product: 13.6.0.35_0"
参见online demo。
sed
命令匹配任何文本直到 space,然后匹配 space 并将随后的两个点分隔数字捕获到组 1 (</code>)然后该行的其余部分匹配并替换为打印的第 1 组值(因为默认行输出被 <code>-n
抑制)。
在 awk
命令中,字段分隔符设置为白色 space 和 .
与 -F'[[:space:].]'
并且 {print "."}
部分打印第二个和第三个字段值与 .
.
连接
我达到了预期的输出,它很简单但很有效:
var=$(echo "product: 13.6.0.35_0" | grep -Eo '[[:digit:]]+' | sed -n 1,2p)
echo ${var} | sed 's/ /./g'
一个纯粹的 shell 解决方案,使用内置的 read
、参数扩展和用于命令分组的大括号。
echo "product: 13.6.0.35_0" | { read -r _ value; echo "${value%.*.*}" ; }
你也可以使用cut
:
echo 'product: 13.6.0.35_0' | cut -d ' ' -f2 | cut -d '.' -f1-2
13.6
我想在与内容匹配后过滤所有内容,并在“.”之后带上第一个值
我有这样的输出:
输出:
product: 13.6.0.35_0
更具体地说,我只需要前两位数字和点后的第一位数字,记住我们不应该坚持问题中的价值观,而应该坚持过滤内容的方法。
预计:
13.6
我试过类似的方法:
echo "product: 13.6.0.35_0" | grep -ow '\w*13\w*'
如果需要在当前逻辑下使用grep
,可以使用
echo "product: 13.6.0.35_0" | grep -ow '13\.[0-9]*' | head -1
其中 13\.[0-9]*
匹配 13
、.
和零个或多个数字(由于 w
选项作为整个单词)并且 head -1
获得第一个匹配。
您也可以使用 sed
或 awk
:
sed -En 's/.* ([0-9]+\.[0-9]+).*//p' <<< "product: 13.6.0.35_0"
awk -F'[[:space:].]' '{print "."}' <<< "product: 13.6.0.35_0"
参见online demo。
sed
命令匹配任何文本直到 space,然后匹配 space 并将随后的两个点分隔数字捕获到组 1 (</code>)然后该行的其余部分匹配并替换为打印的第 1 组值(因为默认行输出被 <code>-n
抑制)。
在 awk
命令中,字段分隔符设置为白色 space 和 .
与 -F'[[:space:].]'
并且 {print "."}
部分打印第二个和第三个字段值与 .
.
我达到了预期的输出,它很简单但很有效:
var=$(echo "product: 13.6.0.35_0" | grep -Eo '[[:digit:]]+' | sed -n 1,2p)
echo ${var} | sed 's/ /./g'
一个纯粹的 shell 解决方案,使用内置的 read
、参数扩展和用于命令分组的大括号。
echo "product: 13.6.0.35_0" | { read -r _ value; echo "${value%.*.*}" ; }
你也可以使用cut
:
echo 'product: 13.6.0.35_0' | cut -d ' ' -f2 | cut -d '.' -f1-2
13.6