2

我正在寻找修剪文件,我需要在第二场比赛之后删除所有内容(以及第一场比赛之前的所有内容)。

例如说我有这个文本:

xxx xxx
yyy yyy
New USB device found
xxx xxx
yyy yyy
zzz zzz
New USB device found
xxx xxx
yyy yyy

如果我使用以下sed命令:

sed -i '1,/New USB device found/d' <FILE>  

这会在第一场比赛之前删除所有内容。这很棒:

New USB device found
xxx xxx
yyy yyy
zzz zzz
New USB device found
xxx xxx
yyy yyy

但我只有 1/2 的方式,现在我想在第二场比赛之后删除所有内容以获得这个结果:

New USB device found
xxx xxx
yyy yyy
zzz zzz

因此只有第一个设备的数据。

4

4 回答 4

8

这个 awk 单线应该给你想要的:

awk '/New USB device found/{p++}p==1' file

用你的数据测试:

kent$  awk '/New USB device found/{p++}p==1' file
    New USB device found
    xxx xxx
    yyy yyy
    zzz zzz
于 2013-10-01T20:52:19.937 回答
2

如果你有GNU awk那么:

$ awk 'NR==2{print RS,$0}' RS='New USB device found' file
New USB device found 
xxx xxx
yyy yyy
zzz zzz

只需比较您要打印的记录号NR。这使得打印第 112 条记录与打印第 4 条记录一样简单,只需更改NR==2NR==112或即可NR==4

于 2013-10-01T20:53:57.680 回答
1

这是一个 sed 解决方案:

sed -i '1,/New USB device found/d; /New USB device found/,$d' <FILE>
于 2013-10-01T21:17:12.653 回答
1

使用 sed:

sed -n '/New/{:a;p;n; /New/!ba}' input
于 2013-10-01T21:19:33.610 回答