Bash 删除到一行

Bash 删除到一行,bash,perl,shell,sed,scripting,Bash,Perl,Shell,Sed,Scripting,我有一条线看起来像: foo cat dog = -48.34277635 foo(horse->0) = -60.34277635 我只想要最后一组数字: -60.34277635 该行的格式与该精确间距相同。我到处寻找一个更简单的解决方案,但是如果不把文件一块一块地切碎,直到我得到我想要的东西,我就找不到任何东西。我唯一的方法是效率非常低,我想知道是否还有其他方法可以做到这一点。通常,我会使用sed获取特定的字符/单词,然后从后面删除。因为我的字符串中

我有一条线看起来像:

  foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635  
我只想要最后一组数字:

-60.34277635
该行的格式与该精确间距相同。我到处寻找一个更简单的解决方案,但是如果不把文件一块一块地切碎,直到我得到我想要的东西,我就找不到任何东西。我唯一的方法是效率非常低,我想知道是否还有其他方法可以做到这一点。通常,我会使用sed获取特定的字符/单词,然后从后面删除。因为我的字符串中重复了很多次单词,所以我很难做到这一点

数字的长度也可以更改,但只能更改尾随的小数

如果可能的话,最好使用Perl或Bash/Shell提供帮助。

尝试以下方法:

grep -oE '[0-9.-]+$' file


如果您的意思是只需要每行的最后一个字段,那么可以用Perl编写

open my $fh, '<', 'myfile' or die $!;
my @data;
push @data, (split)[-1] while <$fh>;

打开我的$fh,”使用awk并指定字段8(假设格式不变),我得到如下结果:

$ cat testfile 
foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635
$ awk '{print $8}' < testfile
-60.34277635
$cat测试文件
foo猫狗=-48.34277635 foo(马->0)=-60.34277635
$awk'{print$8}'
BASH内置方式:

#!/bin/bash

line='foo cat dog =      -48.34277635  foo(horse->0) =      -60.34277635'
echo "${line##* }"
产出:

-60.34277635

awk-F'分隔符'{print$NF}'-如果需要最后一列


awk-F“分隔符”{print$index}”-如果需要具有特定列的索引。请不要在这里索引以1开头

显示该示例输入的所需输出。完美。谢谢我得到了-oE部分,但是您能解释一下其余部分吗?
[0-9.-]+$
是一个正则表达式,它描述了行的最后一部分<代码>[…]
列出了允许的字符(0到9,一个点和一个减号)。加号表示前一个字符必须至少出现一次。以下是
[…]
中允许的字符列表中的前一个字符
$
标记行的结尾。Perl,对吗?我忘了你可以(分开)[1]。谢谢。是的,Perl。对不起,我应该说没关系。看起来很眼熟。我想检查一下,为什么这样行?第二个#是否表示一个数字的第二个实例?@jcklasster:
#
表示从变量内容的开头删除最大可能的匹配字符串,
*
表示匹配任何内容直到空格。
-60.34277635