如何通过提取某些部分生成一个新文件?

如何通过提取某些部分生成一个新文件?

我的初始日志文件提取如下:

b6227|—|

答案1

sed在蒙特利 12.6 上使用

$ sed -En '/.*

答案2

使用(以前称为 Perl_6)

~$ raku -ne 'put $<> if m/ "Final SoC is " <(\d* \. \d*)> /;'  file

#OR
 
~$ raku -ne 'put $0 if m/ "Final SoC is " (\d* \. \d*) /;' file

输入示例:

b6227|—|

答案3

这是用来sed匹配想要的行,然后截掉最后一个空格之前的所有内容:

sed -e '/SocEvaluator:.*Final SoC is [[:digit:]]/!d' -e 's/.* //' file

对于给定的数据,这将输出

64.5537%

要删除该%字符:

sed -e '/SocEvaluator:.*Final SoC is [[:digit:]]/!d' -e 's/.* //' -e 's/%$//' file

使用awk完全相同的检测正则表达式,然后打印该表达式匹配的每一行的最后一个字段:

awk '/SocEvaluator:.*Final SoC is [[:digit:]]/ { print $NF }' file

%打印前去除标志:

awk '/SocEvaluator:.*Final SoC is [[:digit:]]/ { sub("%$","",$NF); print $NF }' file

正则表达式

SocEvaluator:.*Final SoC is [[:digit:]]

...将匹配包含文本的任何行SocEvaluator:,后跟文本Final SoC is和数字。

请注意, macOS 上的sedawk不理解与 Perl 兼容的正则表达式,例如\d.与这一点相关:为什么我的正则表达式在 X 中有效但在 Y 中无效?

相关内容