我有一份文件如下。在其中,我想单独删除特定子标题下的行。我试过使用sed和awk命令,但没有得到。有谁能用一些linux命令来帮助破解这个问题呢?
[first attempt]
a=10
b=20
[second attempt]
a=20
b=20
[third attempt ]
a=30
b=50我想单独删除“第二次尝试”副标题下的行。输出应如下。我只想删除子标题下的内容,并且可以选择将删除的行替换为一个空行。
[first attempt]
a=10
b=20
[second attempt]
[third attempt ]
a=30
b=50发布于 2015-10-22 09:07:14
awk -v blkid=0 -v rmblk=2 '{
if ( $1 ~ /^\[/) {
blkid+=1;blkn=NR;print };
if ( blkid !=rmblk && NR!=blkn )
print ;
else if(blkid ==rmblk && NF == 0)
print ""}' file.txt每个块将有id,从每个块的增量1开始:blkid。
要删除的块的块id:rmblk
当第一个字段以[开始时,每个块将启动。
变量blkn存储[first attempt] [second attempt]等的NR值。
发布于 2015-10-23 14:46:36
您也可以使用一个简短的sed脚本来完成这个任务。将以下内容放入文件中:
/second/ {
n
: del
/./ ! b
N
s/.*\n//
b del
}叫它script。然后使用sed -f script myfile。如果您正在尝试编辑文件,请使用sed -i -f script myfile,但我建议您在尝试该命令之前运行第一个命令,并确保它恰好是您想要的输出。
解释:
找到字符串second后,sed将查看下一行。如果该行不是空的,则会丢弃该行,并查看文件中的下一行,直到找到空行为止。文件中的空行和所有其他行都会被打印出来。(除非有另一行包含字符串second,在这种情况下,进程会重复。)
(如果有人感兴趣,我可以解释更多。)
https://unix.stackexchange.com/questions/237822
复制相似问题