gpt4 book ai didi

regex - 日志文件的 SED 正则表达式替换

转载 作者:行者123 更新时间:2023-12-02 00:16:28 25 4
gpt4 key购买 nike

我运行一个 Minecraft 服务器并且喜欢定期清理我的日志文件。我开发了一堆可以在 gedit 或 notepad++ 中使用的正则表达式命令,它们运行良好,但我希望能够自动执行该过程。

基本的文件清理命令如下所示:

cat server.log | sed -e 's/REGEXTODELETE//g' > server.log

但我无法将正则表达式命令正确转换为 SED。我在 CentOS6.3 机器上使用 sed。

这是在 notepad++ 中运行的命令示例:

^[0-9]+-[0-9]+-[0-9]+ [0-9]+:[0-9]+:[0-9]+ \[INFO\] Connection reset$

但是当我将它输入我的 bash 脚本时:

cat server.clean.log | sed -e 's/^[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]* \[INFO\] Connection reset$//g' > server.clean.log

它会清空整个文件。我已经看了一遍,我怀疑我遇到了空格问题,但经过大约一个小时的搜索后,我被卡住了。感谢任何帮助,我可以提供更多示例。

最佳答案

如果您想直接修改一个文件,而不创建临时文件,您可以使用 sed 的 -i 选项。例如,如果你想删除任何包含你提到的字符串的行,你可以使用:

sed -i'' '/^[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]* \[INFO\]  Connection reset$/d' server.log

这避免了不必要的管道,以及您在将输出重定向到输入文件时遇到的困惑。

请注意,我在这里使用 sed 删除行。当您使用 s/RE/text/ 表示法时,您正在替换内联内容。您的输出行总数将与输入行相同,只是(我想)如果您只是将文本替换为空白,您将有一堆空白行。

如果您不介意处理临时文件问题,您可能可以使用 grep 而不是 sed 来使它更清楚一些。

grep -v '^[0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]* \[INFO\]  Connection reset$' server.log > clean..log

或者甚至:

grep -Pv '^\d+(-\d+)+ \d+(:\d+)+ \[INFO\]  Connection reset$' server.log > clean.log

如果您使用的是 Linux 并且不介意 evil regular expressions . (根据我的经验,\d POSIX 类简写不能可靠地工作,除非您将正则表达式视为 PCRE。

关于regex - 日志文件的 SED 正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12849768/

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