Regex 分析bash工具的输出-->;仅获取具有匹配模式的字符串(之间没有任何内容)

Regex 分析bash工具的输出-->;仅获取具有匹配模式的字符串(之间没有任何内容),regex,bash,shell,grep,Regex,Bash,Shell,Grep,我使用一个can发现工具,该工具提供如下输出: ------------------- CARING CARIBOU v0.3 ------------------- Loaded module 'uds' Sending Diagnostic Session Control to 0x0710 Verifying potential response from 0x0710 Resending 0x710... Success Found diagnostics server

我使用一个can发现工具,该工具提供如下输出:

-------------------
CARING CARIBOU v0.3
-------------------

Loaded module 'uds'

Sending Diagnostic Session Control to 0x0710
  Verifying potential response from 0x0710
    Resending 0x710...  Success
Found diagnostics server listening at 0x0710, response at 0x077a
Sending Diagnostic Session Control to 0x07df
  Verifying potential response from 0x07df
    Resending 0x7df...  Success
Found diagnostics server listening at 0x07df, response at 0x077a
Sending Diagnostic Session Control to 0x07e0
  Verifying potential response from 0x07e0
    Resending 0x7e0...  Success
Found diagnostics server listening at 0x07e0, response at 0x077a
Sending Diagnostic Session Control to 0x07ff

Identified diagnostics:

+------------+------------+
| CLIENT ID  | SERVER ID  |
+------------+------------+
| 0x00000710 | 0x0000077a |
| 0x000007df | 0x0000077a |
| 0x000007e0 | 0x0000077a |
+------------+------------+
现在,我想在Java脚本应用程序中处理结果,并将其作为客户机和服务器ID保存到数据库中。但要做到这一点,我需要解析上面的输出,以获得作为客户机和服务器ID的ID。 现在的第一步是从输出中获取十六进制ID,并指定是客户端还是服务器。 问题是我对grep/awk/sed的了解还不够好,无法想出任何bash命令来解决我的问题。 如果有人能帮我一点忙就好了:)

我尝试了各种grep命令,比如
grep 0x000光盘\u日志\u temp.txt
,也有不同的选项,如-w-x-o等

通过这些命令,我得到如下输出:

Sending Diagnostic Session Control to 0x0710
| 0x00000710 | 0x0000077a |
| 0x000007df | 0x0000077a |
| 0x000007e0 | 0x0000077a |
但我只需要一个ID字符串,也不明白为什么我的grep显示第一行

现在,如果有人能告诉我,我怎样才能获得ID,并且知道哪些是客户机ID,哪些是服务器ID,那就太好了。
非常感谢您。

如果您使用
awk
,您需要的行的第一个字段是“|”,字段数是5。我不知道你想如何格式化它,但它应该很容易修改

awk '$1=="|"&&NF==5{print "client: " $2 ", server: " $4}' disc_log_temp.txt

如果使用
awk
,则所需行的第一个字段为“|”,字段数为5。我不知道你想如何格式化它,但它应该很容易修改

awk '$1=="|"&&NF==5{print "client: " $2 ", server: " $4}' disc_log_temp.txt

您可能想了解正则表达式语法。但是您可以使用
sed
sed-n-E”/CLIENT-ID.*服务器ID/g;s/[|]\s+(.*)s+[|]\s+(.*)s+.*/\1\2/p“sc_log\u temp.txt
非常感谢这个漂亮的命令:)我将查看正则表达式以了解您是如何做到这一点的。它给了我想要的确切输出。可以接受两个答案吗?带awk的也正确:)再次感谢。您可能想了解正则表达式语法。但是您可以使用
sed
sed-n-E”/CLIENT-ID.*服务器ID/g;s/[|]\s+(.*)s+[|]\s+(.*)s+.*/\1\2/p“sc_log\u temp.txt
非常感谢这个漂亮的命令:)我将查看正则表达式以了解您是如何做到这一点的。它给了我想要的确切输出。可以接受两个答案吗?带awk的也正确:)再次感谢。感谢这个好答案:)我会分析语法来理解你在那里做了什么,但这正是我需要的。非常感谢,现在我得到了一个sed和一个awk的答案,非常好!谢谢你这么好的回答:)我会分析语法来理解你到底做了什么,但这正是我所需要的。非常感谢,现在我得到了一个sed和一个awk的答案,非常好!