![如何通过提取某些部分生成一个新文件?](https://linux22.com/image/211266/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E6%8F%90%E5%8F%96%E6%9F%90%E4%BA%9B%E9%83%A8%E5%88%86%E7%94%9F%E6%88%90%E4%B8%80%E4%B8%AA%E6%96%B0%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我的初始日志文件提取如下:
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 上的sed
和awk
不理解与 Perl 兼容的正则表达式,例如\d
.与这一点相关:为什么我的正则表达式在 X 中有效但在 Y 中无效?