特定の部分を抽出して新しいファイルを生成するには?

特定の部分を抽出して新しいファイルを生成するには?

私の初期ログファイルの抽出は次のとおりです。

b6227|—|

答え1

sedMonterrey 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:... textの後にテキストFinal SoC isと数字が続くすべての行に一致します。

macOSでは、sedawkのPerl互換正規表現を理解していません。\d私の正規表現がXでは動作しますが、Yでは動作しないのはなぜですか?

関連情報