提取/剪切匹配行的字符串

时间:2019-04-30 09:03:29

标签: bash awk sed

我正在尝试从文件中匹配行的开头提取/剪切某些部分。在匹配[SUCCESS]和[FAILURE]行之前,请删除所有内容。 内容如下所示

[1] 10:32:54 [SUCCESS] host123
hyujhbjbhjbjk cbcjd
yuiiiik,,................
[2] 10:32:54 [FAILURE] host123
jbjk cbcjd
yuiiiik,,................
[3] 10:32:54 [SUCCESS] host12356
jhbjbhjbjk cbcjd
yuiiiik,,................

Need expected as below output. with one space/blank line

[SUCCESS] host123
hyujhbjbhjbjk cbcjd
yuiiiik,,................

[FAILURE] host123
jbjk cbcjd
yuiiiik,,................

[SUCCESS] host12356
jhbjbhjbjk cbcjd
yuiiiik,,................

我正在尝试使用sed命令,但没有帮助

sed -n 's/^.*[SUCCESS]/[SUCCESS]/p'
sed -n 's/^.*[FAILURE]/[FAILURE]/p'

2 个答案:

答案 0 :(得分:1)

我认为您应该:

  • 在搜索模式中转义[
  • 停止使用-n标志并依靠自动打印

如果您不介意空白行,则可以使用以下代码,它利用了捕获组和反向引用的作用:

sed -E 's/.*(\[SUCCESS\]|\[FAILURE\])/\n\1/' file

sed -E 's/.*\[(SUCCESS|FAILURE)\]/\n[\1]/' file

您可以try it here

答案 1 :(得分:0)

在我看来,您尝试删除文件的[n] <date>部分,可以使用以下正则表达式来表示该文件:

grep -o "\[[0-9]\] [0-9][0-9]\:[0-9][0-9]\:[0-9][0-9] " *

如您所见,使用grep -o只能显示该行的那一部分。
使用grep -v可以排除包含该表达式的行。

我希望grep -ov将两者结合起来以显示整行,删除表达式,但事实并非如此。

有人可以最后推一下并相应地编辑我的答案吗?