sed 解析编译器警告消息

问题描述 投票:0回答:1

我尝试使用 sed 获取文件路径、行号、编译器警告号和警告消息,但失败了。

> grep -E "C6001|C6011|C28197" release-log.txt | head | sed -r 's/^([a-zA-Z\\:.]+)\(([0-9]+)\) warning (C[0-9]+): (.+).(.+)$/(\3) \1:\2 \4/g'
C:\WindowsFabric\src\prod\ktl\src\inc\kallocator.h(196): warning C6011: Dereferencing NULL pointer 'Allocator'. : Lines: 189, 196 [C:\WindowsFabric\src\prod\src\Lease\KTransport\user\KTransport.user.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\kstringview.proto.h(2505): warning C6001: Using uninitialized memory '*Temp_value_#2479'.: Lines: 2493, 2492, 2496, 2505, 2506, 2505 [C:\WindowsFabric\src\prod\src\Lease\KTransport\user\KTransport.user.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\kstringview.proto.h(2505): warning C6001: Using uninitialized memory '*Temp_value_#2937'.: Lines: 2493, 2492, 2496, 2505, 2506, 2505 [C:\WindowsFabric\src\prod\src\Lease\KTransport\user\KTransport.user.vcxproj]
C:\.tools\CxCache\gmock.1.11.0\lib\native\src\gtest\src\gtest-port.cc(1003): warning C6011: Dereferencing NULL pointer 'regex'. See line 996 for an earlier location where this can occur: Lines: 985, 986, 990, 991, 996, 1000, 1001, 1003 [C:\WindowsFabric\src\prod\test\GoogleTest\lib\GoogleTest.vcxproj]
C:\.tools\CxCache\gmock.1.11.0\lib\native\src\gtest\src\gtest-port.cc(1004): warning C6011: Dereferencing NULL pointer 'buffer'. : Lines: 985, 986, 990, 991, 996, 1000, 1001, 1003, 1004 [C:\WindowsFabric\src\prod\test\GoogleTest\lib\GoogleTest.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\ktask.h(445): warning C6001: Using uninitialized memory 'ResultSet'.: Lines: 439, 444, 445 [C:\WindowsFabric\src\prod\src\Lease\KTransport\user\KTransport.user.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\kallocator.h(196): warning C6011: Dereferencing NULL pointer 'Allocator'. : Lines: 189, 196 [C:\WindowsFabric\src\prod\src\ktllogger\sys\tools\GetMBInfo\GetMBInfo.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\kstringview.proto.h(2505): warning C6001: Using uninitialized memory '*Temp_value_#2479'.: Lines: 2493, 2492, 2496, 2505, 2506, 2505 [C:\WindowsFabric\src\prod\src\ktllogger\sys\tools\GetMBInfo\GetMBInfo.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\kstringview.proto.h(2505): warning C6001: Using uninitialized memory '*Temp_value_#2937'.: Lines: 2493, 2492, 2496, 2505, 2506, 2505 [C:\WindowsFabric\src\prod\src\ktllogger\sys\tools\GetMBInfo\GetMBInfo.vcxproj]
C:\WindowsFabric\src\prod\ktl\src\inc\ktask.h(445): warning C6001: Using uninitialized memory 'ResultSet'.: Lines: 439, 444, 445 [C:\WindowsFabric\src\prod\src\ktllogger\sys\tools\GetMBInfo\GetMBInfo.vcxproj

例如,给定:

C:\WindowsFabric\src\prod\ktl\src\inc\kallocator.h(196): warning C6011: Dereferencing NULL pointer 'Allocator'. : Lines: 189, 196 [C:\WindowsFabric\src\prod\src\Lease\KTransport\user\KTransport.user.vcxproj]

我想要:

(C6011) C:\WindowsFabric\src\prod\ktl\src\inc\kallocator.h:196 Dereferencing NULL pointer 'Allocator'
sed
1个回答
0
投票

假设所有行的结构都与示例行一样,这是可行的。

sed -r "s/^(C:[^(]+)[(](.+)[)]: warning ([^:]+):(.+').*/(\3) \1:\2 \4/" yourFile.txt
© www.soinside.com 2019 - 2024. All rights reserved.