私の初期ログファイルの抽出は次のとおりです。
b6227|—|
答え1
sed
Monterrey 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では、sed
次awk
のPerl互換正規表現を理解していません。\d
私の正規表現がXでは動作しますが、Yでは動作しないのはなぜですか?