使用SED或AWK进行模式提取

使用SED或AWK进行模式提取,sed,awk,grep,Sed,Awk,Grep,如何从v1+r0.68中提取68?使用sed获取最后一个点后的数字: echo 'v1+r0.68' | sed 's/.*[.]\([0-9][0-9]*\)$/\1/' grep擅长提取内容: kent$ echo " v1+r0.68"|grep -oE "[0-9]+$" 68 格瑞普 你会看到 然后键入echo'v1+r0.68'| grep-o'68' 如果您想在任何特殊的地方使用,请执行以下操作: echo 'v1+r0.68' | grep -o '68' > a

如何从v1+r0.68中提取68?

使用sed获取最后一个点后的数字:

echo 'v1+r0.68' | sed 's/.*[.]\([0-9][0-9]*\)$/\1/'

grep擅长提取内容:

kent$  echo " v1+r0.68"|grep -oE "[0-9]+$" 
68
格瑞普

你会看到

然后键入echo'v1+r0.68'| grep-o'68'

如果您想在任何特殊的地方使用,请执行以下操作:

echo 'v1+r0.68' | grep -o '68' > anyWhereSpecial.file_ending

使用awk,返回最后一个“.”之后的所有内容

echo "v1+r0.68" | awk -F. '{print $NF}'

使用grep匹配行尾前的数字字符串:

或匹配a后面的任何数字

把所有的东西都替换掉。对于sed:


为什么不使用字符类呢?s/+\.\d+$/\1/当你这样做时,人们会投票反对你,因为这是GNU-sed-perreal,你得到了很多我的+1感谢…这很有魅力…任何我可以用作参考的sed书籍网站…再次感谢你的帮助。sed的/*\。/'是你所需要的。这个问题的根本问题是你没有告诉我们输入的一般形式是什么,也没有告诉我们什么定义了所需的输出。只有一个案例可以处理{print 68}是一个有效的解决方案。
echo "v1+r0.68" | awk -F. '{print $NF}'
$ echo 'v1+r0.68' | grep -Eo '[0-9]+$'
68
$ echo 'v1+r0.68' | grep -Po '(?<=\.)\d+'
68
echo "v1+r0.68" | awk -F. '{print $NF}'
68
echo "v1+r0.68" | sed 's/.*\.//'
68