我正试图找到一种有效的方法来搜索目录中的一组文件,并且只查找一个直到第一个逗号的特定字符串。
postgres日志文件示例:
Apr 27 03:35:18 test postgres[24098]: [5-1] user=postgres,db=postgres,app=psqlclient=127.0.0.1
Apr 27 03:35:18 test postgres[24098]: [5-2] user=postgres,db=postgres,app=psqlclient=127.0.0.1 我只对文件中使用的用户名感兴趣。我可以使用pgbadger,并通过HTML查看它,但这会很费时。
举个例子,我可以看到:
user=postgres与用户之前和之后的整个文本集相反。
然而,我正在寻找任何用户,不是专门的postgres。
我尝试过在文件上使用grep,但我只在user=postgres上看到结果。
有没有搜索一组文件,比如user=,直到第一个逗号作为例子?
甚至搜索每个文件并删除每一行中的user=之前的任何内容,然后我可以将其放入excel以获得所需的结果。
任何帮助都是非常感谢的。
发布于 2021-06-04 16:10:20
将GNU grep与PCRE结合使用:
grep -Po -- '(?<=user=).+?(?=,)' *.log如果您也喜欢显示user=关键字:
grep -o -- 'user=[^,]*' *.log您甚至可以通过将-H选项添加到上面的grep命令中来显示匹配成功的文件(没有它,只有在指定了多个文件时才会显示文件名)。
因此,grep命令变成:
grep -Ho -- 'user=[^,]*' *.log以及产出:
pgsql.log:user=postgres
pgsql.log:user=postgreshttps://unix.stackexchange.com/questions/652814
复制相似问题