我正在尝试从文件中匹配行的开头提取/剪切某些部分。在匹配[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'
答案 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
将两者结合起来以显示整行,删除表达式,但事实并非如此。
有人可以最后推一下并相应地编辑我的答案吗?