gpt4 book ai didi

linux - 日志文件中的重复模式

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:01 24 4
gpt4 key购买 nike

日志文件内容如下,

I, [2018-03-07T10:21:26.315447 #7531]  INFO -- : POST http://127.0.0.1:8080/api/v3/internal/allowed 6.69490
I, [2018-03-07T10:21:26.315799 #7531] INFO -- : gitlab-shell: executing git command <git-upload-pack /var/opt/gitlab/git-data/repositories/GitLab-write-logs/write-logs.git> for user with key key-1.
I, [2018-03-07T10:23:00.567841 #7739] INFO -- : POST http://127.0.0.1:8080/api/v3/internal/allowed 5.55714
I, [2018-03-07T10:23:00.568227 #7739] INFO -- : gitlab-shell: executing git command <git-upload-pack /var/opt/gitlab/git-data/repositories/GitLab-read-logs/read-logs.git> for user with key key-3.
I, [2018-03-07T10:23:49.932948 #7851] INFO -- : gitlab-shell: executing git command <git-receive-pack /var/opt/gitlab/git-data/repositories/GitLab-RW-logs/RW-logs.git> for user with key key-5.
I, [2018-03-07T10:55:29.533385 #4778] INFO -- : gitlab-shell: executing git command <git-receive-pack /var/opt/gitlab/git-data/repositories/GitLab-write-logs/write-logs.git> for user with key key-1.
I, [2018-03-07T10:55:29.810478 #4790] INFO -- : POST http://127.0.0.1:8080/api/v3/internal/allowed 0.10971

模式=

有多行具有此匹配模式。如何从每一行中提取信息?

举个例子,在第二行中我们有匹配的模式 < git-upload- 然后我想从该行提取字符串 '/var/opt/gitlab/git-data/repositories/GitLab-write-logs/write-logs 并分配给一个变量并执行一些操作。

我希望按顺序对所有匹配的行执行此过程,而不重复相同的行,我应该怎么做?感谢大家的意见

假设,我们有 50 行,其中包含匹配的模式行。我们可以 grep 一行一次执行操作并选取下一行并重复相同的操作吗?

逻辑:

    if more somefile.log | grep -Eq < git-upload-pack ; then
variable = /var/opt/gitlab/git-data/repositories/GitLab-write-logs/write-logs [ .git shouldn't be there]
do some action
fi

我应该放置 while 循环 (i=0, i++) 在每一行上重复该过程,例如 .. 检查该行 if 模式,然后执行“if”条件并退出条件并重复下一行我是脚本编写新手,正在努力连接点

谢谢大家

最佳答案

听起来像是 grep 和 cut 的工作,只要格式是可预测的:

$grep git-upload-pack t | cut -d " " -f 13 | cut -d ">" -f 1
/var/opt/gitlab/git-data/repositories/GitLab-write-logs/write-logs.git
/var/opt/gitlab/git-data/repositories/GitLab-read-logs/read-logs.git
  1. grep git-upload-pack 命令查找包含 git-upload-pack 的行
  2. cut -d ""-f 13 抓取第 13 个空格分隔字段
  3. cut -d ">"-f 1 抓取 2 个字段中的第一个,有效删除尾随的 ">"

循环结果输出:

$grep git-upload-pack t |
cut -d " " -f 13 |
cut -d ">" -f 1 |
while read f; do echo your-command ${f%.*}; done

您可以将“your-command”替换为您想要对每场比赛执行的操作,并删除回显以实际运行它。用 echo 尝试一下,直到它有意义为止。

How can remove the extension of a filename in a shell script?解释 ${f%.*} 来删除 .git。

关于linux - 日志文件中的重复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49700418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com