我正在尝试从具有多个字符串和通配符的日志文件中获取匹配项。这就是日志的样子
测试.log
abc|07Jan2016:sessionId=F4DF
<<random log lines>>
def|08Jan2016:sessionId=5415
<<random log lines>>
abc|08Jan2016:sessionId=F4DF
<<random log lines>>
xyz|09Jan2016:sessionId=F3D2
<<random log lines>>
ijk|06Jan2016:sessionId=CF38
我期待的结果
abc|07Jan2016:sessionId=F4DF
ijk|06Jan2016:sessionId=CF38
如您所见,我只想从字符串匹配“abc”和“ijk”的行中获取具有 sessionIds 的日志行
我尝试过的 grep 命令
grep -m 1 'abc.*sessionId\|ijk.*sessionId' test.log
我得到的结果
ijk|06Jan2016:sessionId=CF38
grep 不是在寻找与字符串“abc”的匹配,而是在寻找与通配符“.*sessionId”匹配的“ijk”。有人可以让我知道我在这里缺少什么吗?
最佳答案
这个awk
可以解决这个问题:
awk 'BEGIN {FS="\\|"; pat["abc"]; pat["ijk"]}
$1 in pat && /:sessionId=/ {print; delete pat[$1]}' file.log
abc|07Jan2016:sessionId=F4DF
ijk|06Jan2016:sessionId=CF38
关于linux - 带有多个字符串和通配符的 Grep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71428367/