簡體   English   中英

在第二個圖案sed之后刪除行

[英]remove lines after second pattern sed

我正在尋找一個修剪文件,我需要刪除第二場比賽之后的所有內容(以及第一場比賽之前的所有內容)。

例如說我有這段文字:

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單行代碼應提供您想要的東西:

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 這使得僅通過將NR==2更改為NR==112NR==4輕松打印第112條記錄。

這是一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM