一个数万行的日志文件,如何列出其中满足某些规律(例如:包含 create_obj)的所有行。并去掉其它行?
如果你在 linux 服务器,通常可以直接使用 grep 来做:
grep create_obj my_log.txt
但多数 windows 电脑并不支持 grep。
一般来说可以用 Visual Studio Code 来代替。
那么在 Visual Studio Code 应该如何写?
答案在这里:https://stackoverflow.com/questions/406230/regular-expression-to-match-a-line-that-doesnt-contain-a-word
Visual Studio Code 按正则表达式查找 ^((?!create_obj).)*$\n
并替换为空字符串,就可以删除不包含 create_obj
的所有行。
解释如下。
Visual Studio Code 使用 javascript 的正则表达式格式(Sublime 也是用这个格式)
所以可以看这个参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions
其中提到一个概念“先行断言”。
x(?=y)
表示匹配 x,并且要求后面跟随着的内容可以匹配 y。
x(?!y)
表示匹配 x,并且要求后面跟随着的内容不能匹配 y。
于是 (?!create_obj).
就表示“后面跟随内容不能 create_obj 的任意一个字符”。
再括起来加上 *
号,就表示“后面跟随内容不能 create_obj 的任意个字符”。
然后头部加上 ^
,尾部加上 $
,这就表示“完整的一行,且每个字符后面跟随的内容都不能匹配 create_obj”。
为了替换之后不留空行,所以再加一个 \n
,从而把换行符也替换掉。
于是结论为:正则表达式查找 ^((?!create_obj).)*$\n
并替换为空字符串。