簡體   English   中英

我需要使用 sed 查找匹配項並刪除該匹配項之前的 2 行和之后的 3 行

[英]I need to find a match using sed and deletes 2 lines before this match and 3 lines after it

我需要使用“sed”找到匹配項,並在該匹配項之前刪除 2 行,之后刪除 3 行,然后打印輸出,我該怎么做?

如果文件不是很大,請嘗試以下操作:

    awk 'NR==FNR{if($0~/matchWord/){for(i=NR-2;i<=NR+3;i++){if(i!=NR)a[i]++}}}\
NR>FNR{if(!(FNR in a))print $0}' file file

我沒有測試,但應該可以。

首先,您不想在sed中執行此操作。 第二,您的問題提出來了:如果您在第5行和第8行有比賽,該怎么辦? 第8行會被刪除,而第6行會保留嗎? 假設這不是一個問題,這似乎可以滿足您的要求:

#!/bin/sed -nf

1{ h; d; } 
H
2,5d
g
/^\([^\n]*\n\)\{2\}match/!P
/^\([^\n]*\n\)\{2\}match/{
  s/\n[^\n]*$//
  N
}
s/[^\n]*\n//
h
$p

注意:如果匹配發生在文件的最后3行中,則此行為不符合預期。 該案例留給(受虐狂)讀者練習。

sed ‘/matchWord/,+3d;:flag;1,2!{P;N;D};N;bflag’ file

暫無
暫無

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

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