我想修剪一个文件,我需要删除第二场比赛后的所有内容(以及第一场比赛之前的所有内容(。
例如,假设我有以下文本:
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
因此,只有第一个设备的数据。
这个尴尬的单行本应该给出你想要的:
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
如果您有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==2
更改为 NR==112
或 NR==4
即可。
这是一个 sed 解决方案:
sed -i '1,/New USB device found/d; /New USB device found/,$d' <FILE>
使用 sed:
sed -n '/New/{:a;p;n; /New/!ba}' input