bash - 从日志文件中提取特定单词

标签 bash awk sed cut

现有日志文件:

00:00:00.035790 0x7ff488dfa700>INFO: Session(ABC_BETA -1): 0.000494 Type Info
00:24:00.035799 0x7ff488dfa700>DEBUG: Session(ABC_BETA -1): 1.000000 Type Debug
01:02:00.035801 0x7ff488dfa700>INFO: Session(2NDStage -1): 0.000133 Type Info
21:00:00.035803 0x7ff488dfa700>INFO: Session(jOHN -1): 0.000140 Type Info
23:59:00.035805 0x7ff488dfa700>INFO: Session(NIRVANA -1): 0.003880 Type Info

预期结果:

00:00:00 INFO ABC_BETA
00:24:00 DEBUG ABC_BETA
01:02:00 INFO 2NDStage
21:00:00 INFO jOHN
23:59:00 INFO NIRVANA

我能够使用 sed 组合来提取它,剪切如下:

sed 's/[\.\>\)\( \]/{/g'<testfile.log|cut -d "{" -f 1,4,6|sed 's/{/ /g'|sed 's/: / /g'

只是想知道是否有更好的方法来做到这一点?

最佳答案

$ awk -F'[.> (]|: ' '{print $1, $4, $6}' file
00:00:00 INFO ABC_BETA
00:24:00 DEBUG ABC_BETA
01:02:00 INFO 2NDStage
21:00:00 INFO jOHN
23:59:00 INFO NIRVANA

关于bash - 从日志文件中提取特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68693402/

相关文章:

regex - awk 正则表达式行 anchor 的开始匹配空格

regex - awk - 如果下一行与模式不匹配则删除行

perl - 对 grep 命令的结果进行分组

awk - 当行 ID 匹配时,如果子字符串中存在另一个文件中的两个字符位置,则从文件中提取子字符串

regex - 正则表达式和 sed 命令 : echo 1234567890|sed 's/((?<=\d)\d{3})*\b/TEST/'

bash - SED:在范围末尾追加一行

SSH 的 Bash/Expect 脚本

linux - 我正在尝试发送邮件,该邮件将重定向同一目录中 logfile.txt 中日志文件的内容。但它失败

python - 计算 shell 脚本中矩阵中沿行和列而非对角线连接的非零数的数量

shell - 从文件中删除最后 3 列