【发布时间】:2021-04-19 16:04:45
【问题描述】:
我在编写 Perl 单行代码时需要帮助
- 在文件中查找字符串并
- 从该字符串中提取一个浮点数或一个指数。
例如,我有一个名为results.log的文本文件:
...
TOL: 0.0244141
ort: 0.000282395
Q orthogonality: True
EPS: 0.000488281
err: 9.58692e-05
QR decomposition: True
Success: True
...
它包含数值实验的结果。我想找到以TOL: 开头的行并提取公差值0.0244141。我可以写一个单行来找到以TOL开头的行:
perl -ne '/TOL:/ && print' results.log
TOL: 0.0244141
我可以找到一行包含浮点数0.0244141
echo "TOL: 0.0244141" | perl -ne '/\d+.\d+/ && print'
有没有办法将两个正则表达式“堆叠”在一起并依次应用它们以提取数值本身?换句话说,是否可以将正则表达式应用于前面的正则表达式的结果?
为了完成这个任务,我想从 Perl 脚本中调用这个单行代码并将提取的结果存储到一个变量中:
my $tol = system( qq{ perl -ne '... && print' results.log } );
【问题讨论】:
-
这就像一个 XY-problem 包裹在一个 XY 问题中。 ;) 从 Perl 内部调用 Perl 单行代码可能被认为有些奇怪。您可以使用常规代码以更少的问题完成相同的事情。而且,
system()不返回输出,您需要qx()或反引号。 -
我完全同意你的评论。但我认为以常规代码方式(打开文件,解析并关闭文件)来查找单个值是一种过度杀伤力。如果我错了,请纠正我。
-
嗯,这就是你正在做的事情......但你做的更慢,更复杂,更容易出错。
-
我明白了。你能告诉我一个更好的方法来从脚本中做到这一点,一种正确的 Perl 方式吗?
标签: regex perl text-extraction