sed版本提取
Sed version extract
我正在尝试从字符串中提取版本号。我找不到确切的正则表达式来找到我需要的东西。
例如-
1012-EPS-Test-OF-Something-1.3
我只需要 sed 从上面的行中提取 1.3
。
到目前为止,我已经尝试了很多类似的东西,但显然没有效果
sed 's/[^0-9.0-9]*//')
使用您展示的示例,最简单的方法可能是。只需将 shell 变量的值作为输入打印到 awk
程序中,然后将字段分隔符设置为 -
并打印其中的最后一个字段值。
echo "$string" | awk -F'-' '{print $NF}'
第二个解决方案: 如果您在值的最后一个字段中除了版本号之外还有其他任何东西(其中 -
是字段分隔符) 然后使用 awk
.
的 match
功能
echo "$var" |
awk -F'-' 'match($NF,/[0-9]+(\.[0-9]+)*/){print substr($NF,RSTART,RLENGTH)}'
第三个解决方案: 使用 GNU grep
尝试以下一次。在此处使用 GNU grep
的 \K
选项。这将匹配 -
之前的所有内容,然后提及 \K
将忘记或不会考虑打印匹配的值,并将打印所有进一步匹配的值(进一步提到正则表达式)。
echo "$var" | grep -oP '.*-\K\d+(\.\d+)*'
这应该适用于任何 grep
:
s='1012-EPS-Test-OF-Something-1.3'
grep -Eo '[0-9]+(\.[0-9]+)+' <<< "$s"
1.3
这可能对你有用 (GNU sed):
sed -n 's/.*[^0-9.]//p' file
regexp 是贪婪的,吞下整行 .*
然后一次退回一个字符,直到 [^0-9.]
的第一个匹配,删除前面的部分并打印剩余部分。
您可以使用字符串操作来获取 -
:
之后的最后一部分
s='1012-EPS-Test-OF-Something-1.3'
s="${s##*-}"
#!/bin/bash
s='1012-EPS-Test-OF-Something-1.3'
s="${s##*-}"
echo "$s"
# => 1.3
${string##substring}
Deletes longest match of $substring from front of $string.
我正在尝试从字符串中提取版本号。我找不到确切的正则表达式来找到我需要的东西。
例如-
1012-EPS-Test-OF-Something-1.3
我只需要 sed 从上面的行中提取 1.3
。
到目前为止,我已经尝试了很多类似的东西,但显然没有效果
sed 's/[^0-9.0-9]*//')
使用您展示的示例,最简单的方法可能是。只需将 shell 变量的值作为输入打印到 awk
程序中,然后将字段分隔符设置为 -
并打印其中的最后一个字段值。
echo "$string" | awk -F'-' '{print $NF}'
第二个解决方案: 如果您在值的最后一个字段中除了版本号之外还有其他任何东西(其中 -
是字段分隔符) 然后使用 awk
.
match
功能
echo "$var" |
awk -F'-' 'match($NF,/[0-9]+(\.[0-9]+)*/){print substr($NF,RSTART,RLENGTH)}'
第三个解决方案: 使用 GNU grep
尝试以下一次。在此处使用 GNU grep
的 \K
选项。这将匹配 -
之前的所有内容,然后提及 \K
将忘记或不会考虑打印匹配的值,并将打印所有进一步匹配的值(进一步提到正则表达式)。
echo "$var" | grep -oP '.*-\K\d+(\.\d+)*'
这应该适用于任何 grep
:
s='1012-EPS-Test-OF-Something-1.3'
grep -Eo '[0-9]+(\.[0-9]+)+' <<< "$s"
1.3
这可能对你有用 (GNU sed):
sed -n 's/.*[^0-9.]//p' file
regexp 是贪婪的,吞下整行 .*
然后一次退回一个字符,直到 [^0-9.]
的第一个匹配,删除前面的部分并打印剩余部分。
您可以使用字符串操作来获取 -
:
s='1012-EPS-Test-OF-Something-1.3'
s="${s##*-}"
#!/bin/bash
s='1012-EPS-Test-OF-Something-1.3'
s="${s##*-}"
echo "$s"
# => 1.3
${string##substring}
Deletes longest match of $substring from front of $string.