Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux | awk | shell脚本块删除_Linux_Shell_Awk_Gawk - Fatal编程技术网

linux | awk | shell脚本块删除

linux | awk | shell脚本块删除,linux,shell,awk,gawk,Linux,Shell,Awk,Gawk,我的输入文件有如下块。请帮助我使用awk或sed删除块及其内容 [abc] para1=123 para2=456 para3=111 [pqr] para1=333 para2=765 para3=1345 [xyz] para1=888 para2=236 para3=964 现在我如何完全删除一个块及其参数。请使用awk命令帮助我实现这一点。提前感谢您可以对分割块使用RS(注意:NR>1,因为awk在开始时生

我的输入文件有如下块。请帮助我使用awk或sed删除块及其内容

[abc]  
para1=123  
para2=456  
para3=111  

[pqr]  
para1=333    
para2=765    
para3=1345    

[xyz]    
para1=888    
para2=236    
para3=964    

现在我如何完全删除一个块及其参数。请使用awk命令帮助我实现这一点。提前感谢您可以对分割块使用
RS
(注意:
NR>1
,因为awk在开始时生成一个空块)

你得到

[abc] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964 [美国广播公司] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964
您可以对分割块使用
RS
(注意:
NR>1
,因为awk在开始时生成一个空块)

你得到

[abc] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964 [美国广播公司] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964
您可以对分割块使用
RS
(注意:
NR>1
,因为awk在开始时生成一个空块)

你得到

[abc] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964 [美国广播公司] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964
您可以对分割块使用
RS
(注意:
NR>1
,因为awk在开始时生成一个空块)

你得到

[abc] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964 [美国广播公司] para1=123 para2=456 para3=111 [xyz] para1=888 para2=236 para3=964
我提出了一个稍微不同的解决方案,只使用shell

#!/bin/sh 

# specify the block to withhold
WITHHOLD=2

COUNT=1
INAWHITESP=0

while read i
do if [ -z "$i" -a "$INAWHITESP" -eq 0 ]
   then COUNT=$(( COUNT + 1 ))
        INAWHITESP=1
   fi
   if [ -n "$i" -a "$INAWHITESP" -eq 1 ]
   then INAWHITESP=0
   fi
   if [ "$COUNT" -ne "$WITHHOLD" ]
   then printf "%s\n" "$i"
   fi

done < inputfile > outputfile
#/垃圾箱/垃圾箱
#指定要保留的块
扣留=2
计数=1
INAP=0
当我读书的时候
如果[-z“$i”-a“$INAP”-等式0]
然后计数=$((计数+1))
INAP=1
fi
如果[-n“$i”-a“$INAP”-等式1]
那么INAP=0
fi
如果[“$COUNT”-ne“$PREVOT”]
然后打印“%s\n”$i
fi
完成outputfile

我提出了一个稍微不同的解决方案,只使用shell

#!/bin/sh 

# specify the block to withhold
WITHHOLD=2

COUNT=1
INAWHITESP=0

while read i
do if [ -z "$i" -a "$INAWHITESP" -eq 0 ]
   then COUNT=$(( COUNT + 1 ))
        INAWHITESP=1
   fi
   if [ -n "$i" -a "$INAWHITESP" -eq 1 ]
   then INAWHITESP=0
   fi
   if [ "$COUNT" -ne "$WITHHOLD" ]
   then printf "%s\n" "$i"
   fi

done < inputfile > outputfile
#/垃圾箱/垃圾箱
#指定要保留的块
扣留=2
计数=1
INAP=0
当我读书的时候
如果[-z“$i”-a“$INAP”-等式0]
然后计数=$((计数+1))
INAP=1
fi
如果[-n“$i”-a“$INAP”-等式1]
那么INAP=0
fi
如果[“$COUNT”-ne“$PREVOT”]
然后打印“%s\n”$i
fi
完成outputfile

我提出了一个稍微不同的解决方案,只使用shell

#!/bin/sh 

# specify the block to withhold
WITHHOLD=2

COUNT=1
INAWHITESP=0

while read i
do if [ -z "$i" -a "$INAWHITESP" -eq 0 ]
   then COUNT=$(( COUNT + 1 ))
        INAWHITESP=1
   fi
   if [ -n "$i" -a "$INAWHITESP" -eq 1 ]
   then INAWHITESP=0
   fi
   if [ "$COUNT" -ne "$WITHHOLD" ]
   then printf "%s\n" "$i"
   fi

done < inputfile > outputfile
#/垃圾箱/垃圾箱
#指定要保留的块
扣留=2
计数=1
INAP=0
当我读书的时候
如果[-z“$i”-a“$INAP”-等式0]
然后计数=$((计数+1))
INAP=1
fi
如果[-n“$i”-a“$INAP”-等式1]
那么INAP=0
fi
如果[“$COUNT”-ne“$PREVOT”]
然后打印“%s\n”$i
fi
完成outputfile

我提出了一个稍微不同的解决方案,只使用shell

#!/bin/sh 

# specify the block to withhold
WITHHOLD=2

COUNT=1
INAWHITESP=0

while read i
do if [ -z "$i" -a "$INAWHITESP" -eq 0 ]
   then COUNT=$(( COUNT + 1 ))
        INAWHITESP=1
   fi
   if [ -n "$i" -a "$INAWHITESP" -eq 1 ]
   then INAWHITESP=0
   fi
   if [ "$COUNT" -ne "$WITHHOLD" ]
   then printf "%s\n" "$i"
   fi

done < inputfile > outputfile
#/垃圾箱/垃圾箱
#指定要保留的块
扣留=2
计数=1
INAP=0
当我读书的时候
如果[-z“$i”-a“$INAP”-等式0]
然后计数=$((计数+1))
INAP=1
fi
如果[-n“$i”-a“$INAP”-等式1]
那么INAP=0
fi
如果[“$COUNT”-ne“$PREVOT”]
然后打印“%s\n”$i
fi
完成outputfile

取决于您希望如何筛选。如果要删除标题为“[pqr]”的块

awk '!/^\[pqr\]/' RS= ORS='\n\n' input

如果要省略第二条记录(同上)

如果要省略para2=765的记录

awk '$3 !~ "765"' RS= ORS='\n\n' input

取决于您要如何筛选。如果要删除标题为“[pqr]”的块

awk '!/^\[pqr\]/' RS= ORS='\n\n' input

如果要省略第二条记录(同上)

如果要省略para2=765的记录

awk '$3 !~ "765"' RS= ORS='\n\n' input

取决于您要如何筛选。如果要删除标题为“[pqr]”的块

awk '!/^\[pqr\]/' RS= ORS='\n\n' input

如果要省略第二条记录(同上)

如果要省略para2=765的记录

awk '$3 !~ "765"' RS= ORS='\n\n' input

取决于您要如何筛选。如果要删除标题为“[pqr]”的块

awk '!/^\[pqr\]/' RS= ORS='\n\n' input

如果要省略第二条记录(同上)

如果要省略para2=765的记录

awk '$3 !~ "765"' RS= ORS='\n\n' input

要删除块
abc

awk 'BEGIN{RS=""} !/\[abc\]/'

要删除块
abc

awk 'BEGIN{RS=""} !/\[abc\]/'

要删除块
abc

awk 'BEGIN{RS=""} !/\[abc\]/'

要删除块
abc

awk 'BEGIN{RS=""} !/\[abc\]/'

删除块的Perl解决方案
[abc]

perl -lne 'BEGIN{$/=""} print "$_\n" unless /^\[abc\]/' file
  • -n
    循环输入文件的每一行,将该行放入$变量,不要自动打印该行

  • -l
    在处理之前删除换行符,然后将其添加回

  • -e
    执行perl代码

$/
是输入记录分隔符。在
BEGIN{}
块中将其设置为
,将使Perl进入段落模式。
$是当前行。
/^/
是一个以搜索词开头的正则表达式

输出:

[pqr]  
para1=333    
para2=765    
para3=1345    

[xyz]    
para1=888    
para2=236    
para3=964 
此变体支持使用
-s
解析参数,并将[abc]传递给变量
$b

perl -slne 'BEGIN{$/=""} print "$_\n" unless /^$b/' -- -b='\[abc\]' 

删除块的Perl解决方案
[abc]

perl -lne 'BEGIN{$/=""} print "$_\n" unless /^\[abc\]/' file
  • -n
    循环输入文件的每一行,将该行放入$变量,不要自动打印该行

  • -l
    在处理之前删除换行符,然后将其添加回

  • -e
    执行perl代码

$/
是输入记录分隔符。在
BEGIN{}
块中将其设置为
,将使Perl进入段落模式。
$是当前行。
/^/
是一个以搜索词开头的正则表达式

输出:

[pqr]  
para1=333    
para2=765    
para3=1345    

[xyz]    
para1=888    
para2=236    
para3=964 
此变体支持使用
-s
解析参数,并将[abc]传递给变量
$b

perl -slne 'BEGIN{$/=""} print "$_\n" unless /^$b/' -- -b='\[abc\]' 

删除块的Perl解决方案
[abc]

perl -lne 'BEGIN{$/=""} print "$_\n" unless /^\[abc\]/' file
  • -n
    循环输入文件的每一行,将该行放入$变量,不要自动打印该行

  • -l
    在处理之前删除换行符,然后将其添加回

  • -e
    执行perl代码

$/
是输入记录分隔符。在
BEGIN{}
块中将其设置为
,将使Perl进入段落模式。
$是