首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >搜索Linux文件,过滤出特定的字符串并删除所有其他内容。

搜索Linux文件,过滤出特定的字符串并删除所有其他内容。
EN

Unix & Linux用户
提问于 2021-06-04 15:53:32
回答 1查看 143关注 0票数 0

我正试图找到一种有效的方法来搜索目录中的一组文件,并且只查找一个直到第一个逗号的特定字符串。

postgres日志文件示例:

代码语言:javascript
运行
复制
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查看它,但这会很费时。

举个例子,我可以看到:

代码语言:javascript
运行
复制
user=postgres

与用户之前和之后的整个文本集相反。

然而,我正在寻找任何用户,不是专门的postgres。

我尝试过在文件上使用grep,但我只在user=postgres上看到结果。

有没有搜索一组文件,比如user=,直到第一个逗号作为例子?

甚至搜索每个文件并删除每一行中的user=之前的任何内容,然后我可以将其放入excel以获得所需的结果。

任何帮助都是非常感谢的。

EN

回答 1

Unix & Linux用户

发布于 2021-06-04 16:10:20

GNU grepPCRE结合使用:

代码语言:javascript
运行
复制
grep -Po -- '(?<=user=).+?(?=,)' *.log

如果您也喜欢显示user=关键字:

代码语言:javascript
运行
复制
grep -o -- 'user=[^,]*' *.log

您甚至可以通过将-H选项添加到上面的grep命令中来显示匹配成功的文件(没有它,只有在指定了多个文件时才会显示文件名)。

因此,grep命令变成:

代码语言:javascript
运行
复制
grep -Ho -- 'user=[^,]*' *.log

以及产出:

代码语言:javascript
运行
复制
pgsql.log:user=postgres
pgsql.log:user=postgres
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/652814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档