如何在字符串之前和之后删除一行?

chx*_*chx 2 awk

假设您在文本文件中有记录,如下所示:

header
data1
data2
data3

如果data1是给定的字符串,我想删除整个记录.我认为这需要awk,我不知道.

sch*_*hot 6

通过将记录分隔符设置为空字符串,awk可以处理这些多行记录:

BEGIN { RS = ""; ORS = "\n\n" }
$2 == "some string" { next } # skip this record
{ print } # print (non-skipped) record
Run Code Online (Sandbox Code Playgroud)

您可以将其保存在文件中(例如remove.awk)并执行它awk -f remove.awk data.txt > newdata.txt

这假设您的数据格式为:

header
data
....

header
data
...
Run Code Online (Sandbox Code Playgroud)

如果记录之间没有空行,则需要手动拆分记录(每条记录有4行):

{ a[++i] = $0 }
i == 2 && a[i] == "some string" { skip = 1 }
i == 4 && ! skip { for (i = 1; i <= 4; i++) print a[i] }
i == 4 { skip = 0; i = 0 }
Run Code Online (Sandbox Code Playgroud)