Awk Shell脚本,用于在块中找到字符串时删除整个块本身

Awk Shell脚本,用于在块中找到字符串时删除整个块本身,awk,sed,Awk,Sed,我有一个文本文件包含如下数据 server { listen 50; proxy_pass xyz:50; hivinu 所以我想通过传递字符串xyz来删除上面和下面的行:有人能给我解决方案吗?我尝试使用sed,但我只能删除一个(循环)下面的行。但我不知道如何使用sed或awk删除上面的行 我尝试使用sed-ie'/xyz:/,+1d'命令,通过传递xyz字符串来删除文件中的下一行 一旦我将字符串xyz传递到文件,我就需要输出。它应该删除完整的代码行,并在文件中获取空代码。请尝试以

我有一个文本文件包含如下数据

server {
  listen 50;
  proxy_pass xyz:50;
  hivinu
所以我想通过传递字符串xyz来删除上面和下面的行:有人能给我解决方案吗?我尝试使用sed,但我只能删除一个(循环)下面的行。但我不知道如何使用sed或awk删除上面的行

我尝试使用sed-ie'/xyz:/,+1d'命令,通过传递xyz字符串来删除文件中的下一行


一旦我将字符串xyz传递到文件,我就需要输出。它应该删除完整的代码行,并在文件中获取空代码。

请尝试以下操作,在此处读取输入文件2次

awk '
FNR==NR{
  if($0~/xyz/){
    line_number=FNR
    nextfile
  }
  next
}
FNR<(line_number-2) || FNR>(line_number+1)
'  Input_file  Input_file
awk'
FNR==NR{
如果($0~/xyz/){
线号=FNR
下一文件
}
下一个
}
FNR(线号+1)
'输入文件输入文件
解释:为上述代码添加解释

awk '                                          ##Starting awk code from here.
FNR==NR{                                       ##Checking condition FNR==NR which will be TRUE for first time Input_file is being read.
  if($0~/xyz/){                                ##Checking condition if a line contains string xyz then do following.
    line_number=FNR                            ##Assigning current line number to variable line_number here.
    nextfile                                   ##nextfile will STOP reading Input_file first time(GNU awk special).
  }
  next                                         ##next will skip all further statements from here.
}                                              ##Closing BLOCK for first time Input_file.
FNR<(line_number-1) || FNR>(line_number+1)     ##Cheking condition if current line number is lesser than line_number-1 AND greater than line_number+1 then print current line.
'  Input_file  Input_file                      ##Mentioning Input_file name here.
awk'##从这里开始awk代码。
FNR==NR{###检查条件FNR==NR,该条件在第一次读取输入文件时为真。
如果($0~/xyz/){##检查一行是否包含字符串xyz,则执行以下操作。
line_number=FNR##将当前行号分配给此处的可变行号。
下一个文件##下一个文件将第一次停止读取输入文件(GNU awk特殊)。
}
next##next将跳过此处的所有进一步语句。
}##第一次输入_文件的关闭块。
FNR(行号+1)##如果当前行号小于行号-1且大于行号+1,则检查条件,然后打印当前行。
“输入文件输入文件”在此处提及输入文件名。

On,因此我们鼓励用户添加他们为解决自己的问题所付出的努力,因此请在您的问题中添加同样的努力,然后让我们知道。请您尝试一下像
awk'/xyz/'Input_file
sed'/xyz/d'Input_file
并通知我?我尝试过,但传递这两个命令只会删除同一行。它不会删除上面和下面的行。即使grep命令也会执行相同的操作。@KandikuppaVinod,请您在问题中发布预期的示例输出,就像您所做的一样。是否要删除整个块(如Ed sir在此处提到的),请确认,因为我添加了一个答案,但这不会删除仅删除
xyz
上方1行和
xyz
之后1行的完整块,请在此处明确。