sed:删除包含正则表达式的行

Mem*_*hiZ 2 sed

我的日志文件中有以下内容:

[2.09 10:23:56] 
[23.09 10:3:56] 
[23.09 10:23:56] Some other thing
[23.09 10:23:56] 
[23.09 10:23:56] 
[23.09 10:23:5] 
[23.09 10:23:56] Something
[23.09 10:23:56] 
Run Code Online (Sandbox Code Playgroud)

并想使用 sed 删除“空”行(仅包含时间戳的行)。我尝试过以下方法:

sed -i '/\[\d{1,2}\.\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}\] ($|\R)/d' file
sed -i '/\[[0-9][0-9]?\.[0-9][0-9]? [0-9][0-9]?:[0-9][0-9]?:[0-9][0-9]?\] \n/d' file
sed -i '/\[[0-9][0-9]?\.[0-9][0-9]? [0-9][0-9]?:[0-9][0-9]?:[0-9][0-9]?\] ($|\R)/d' file
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何效果。

任何帮助表示赞赏!

Kus*_*nda 10

据我所知,无需创建与行开头括号内的日期字符串匹配的表达式。

\n
$ grep -v -x \'\\[[^]]*\\][[:blank:]]*\' file\n[23.09 10:23:56] Some other thing\n[23.09 10:23:56] Something\n
Run Code Online (Sandbox Code Playgroud)\n

上面删除了以括号字符串 ( ) 开头[like this]且仅包含可选尾随空格的行。

\n

有了sed,这看起来像

\n
$ sed \'/^\\[[^]]*\\][[:blank:]]*$/ d\' file\n[23.09 10:23:56] Some other thing\n[23.09 10:23:56] Something\n
Run Code Online (Sandbox Code Playgroud)\n

表达式的起始位\\[[^]]*\\]是一个文字,[后跟零个或多个非]字符,最后是文字]

\n

使用awk,我们可以将字段分隔符设置为][[:blank:]]*,这意味着]时间戳末尾的 (以及后面的任何空格)将是两个字段之间的分隔符。如果第二个字段为空,我们不会打印当前行。

\n
$ awk -F \'][[:blank:]]*\' \'$2 != ""\' file\n[23.09 10:23:56] Some other thing\n[23.09 10:23:56] Something\n
Run Code Online (Sandbox Code Playgroud)\n

正如Quas\xc3\xadmodo在评论中指出的那样(现已删除),使用awk \'NF > 2\' file也适用于问题中提供的示例数据。awk此方法依赖于默认情况下将行拆分为空白字段的事实。此变体不关心每行的细节,并删除除具有两个以上空格分隔字段的行之外的所有行。

\n


cho*_*oba 7

sed '/^\[[0-9]\{1,2\}\.[0-9]\{1,2\} [0-9]\{1,2\}:[0-9]\{1,2\}:[0-9]\{1,2\}\] $/ d'
Run Code Online (Sandbox Code Playgroud)
  • sed 不支持\d.
  • 量词{...}必须用反斜杠(除非您使用-E
  • 替代方案|必须是反斜杠(除非您使用-E
  • 可选符号?必须是反斜杠(除非您使用-E