linux | awk | shell脚本块删除
我的输入文件有如下块。请帮助我使用awk或sed删除块及其内容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在开始时生
[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
执行perl代码-e
$/
是输入记录分隔符。在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进入段落模式。
$是