내 초기 로그 파일 추출은 다음과 같습니다.
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:
...text 다음에 텍스트 Final SoC is
와 숫자가 오는 모든 줄과 일치합니다 .
macOS에서는 sed
다음 과 awk
같은 Perl 호환 정규식을 이해하지 못합니다 .\d
내 정규 표현식이 X에서는 작동하지만 Y에서는 작동하지 않는 이유는 무엇입니까?