我可以使用 grep 从一个文件/多个文件中提取特定模式吗?也许使用正则表达式?

我可以使用 grep 从一个文件/多个文件中提取特定模式吗?也许使用正则表达式?

我有一个包含大量错误的文件。我使用 grep 提取所有JSONExcpetion错误并将它们保存在一个新文件中,如下所示:

sudo grep -Hrn "JSONException" 2016-* >> jsonexception.txt

现在我有一个包含大量异常的文件JSONExceptions。其中一些异常包含 ID。我想提取这些 ID 并将其保存到另一个文件中。

在我的 Java 代码中,我使用以下正则表达式来识别正确的 ID 格式String

^([A-Fa-f0-9]{24})$

我可以使用类似 grep 的工具来提取 IDjsonexception.txt并将其保存到另一个文件吗?

日志中的一个样本:

2016-02/server-2016-02-11-3.log:17425:11/Feb/2016 12:08:35,519 [错误] [Thread-3] - WorkerRunnable:Worker 2:在字符串上发生 JSONException:{“DEVICE”:[{“ ID”:“32584305d2ff32051d06dfff"},{"TimeStamp":1455185304,"Event":"Boot","BuildDate":"Feb 11 2016","BuildTime":"10:48:00","Reason":"Power on Reset","FSHigh":485,"FSLow":475 ,"VerMajor":0,"VerMinor":9,"VerRevision":2,"VerPatch":2,"MAC":"00:06:66:3a:26:5c","WlanVersion":"4.75","WlanModuleType":"RN131","BoardRev":"RevD1","DisinfectSeconds":0},{ “时间戳”:1455185316,“事件”:“当前设置”,“发布时间”:0,“FSHigh”:535,“FSLow”:425,“占空比”:100,“频率”:1000,“当前”:80,“空闲周期”:30,“静止周期”:20,“自动开启周期”:43200,“自动开启持续时间”:10,“最大开启时间”:14400,“流量灵敏度”:50,“盖子开关”:1,“紫外线通量警告”:70,“紫外线通量不足”:40,“固件服务器”:“���^A.^B�^B.^P�^K�^G�^C�JF^M� �H�O�zp^HI����^C�^G�^C�^M�B�^N�^R��� ����O^B�pG�^D","FirmPort:1,"DeviceTypeName":"","WlanTimeZone":25,"LedRegArray":[{"Bo ardId":"A","LedNo":0,"RegState":"Regulate"},{"BoardId":"A","LedNo":1,"RegState":"Regulate"}]},{"TimeStamp":1455185316,"Event":"CurrentWlanSettings","SettingsArray":[{"WlanSettingsId":1},{"WlanSettingsId":2},{"WlanSettingsId":3}]},{"TimeStamp":145518531 5,“事件”:“连接”,“WlanSettingsId”:“MAC”:“00:06:66:3a:26:5c”,“IP”:“192.168.1.125”,“WLAN”:“TEST1”,“RSSI”:“-52”,“版本”:“4.75”,“AP-MAC”:“ac:9e:17:ea:0f:3c”},{“结束”:100}]} ^M

答案1

如果您grep支持-o,您可以使用以下内容:

grep -o '"ID":"[a-f0-9]\{24\}"' | cut -d\" -f4

第一部分仅提取"ID":"..."部分,第二部分选择第4列,用作"分隔符,即id本身。

"ID":在查询中包含会更安全,否则您可能会意外匹配该行的不同部分。

相关内容