我正在修剪一个文件,我需要在第二场比赛后删除所有内容(以及第一场比赛前的所有内容)。
比如说我有这样的文字:
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
因此只是第一个设备的数据。
答案 0 :(得分:6)
这个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
答案 1 :(得分: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
进行比较。这样,只需将NR==2
更改为NR==112
或NR==4
,即可打印第112条记录,就像打印第4条记录一样简单。
答案 2 :(得分:1)
这是一个sed解决方案:
sed -i '1,/New USB device found/d; /New USB device found/,$d' <FILE>
答案 3 :(得分:1)
使用sed:
sed -n '/New/{:a;p;n; /New/!ba}' input