【发布时间】:2011-03-02 22:26:46
【问题描述】:
如何删除从我看到的每个单词实例开始的 6 行?
【问题讨论】:
如何删除从我看到的每个单词实例开始的 6 行?
【问题讨论】:
我认为这个 sed 命令会做你想做的事:
sed '/bar/,+5d' input.txt
它会删除包含文本 bar 以及以下五行的任何行。
如上运行以查看输出。当您知道它工作正常时,请使用开关--in-place=.backup 来实际执行更改。
【讨论】:
bar出现在bar之后的五行之内,那么后面的bar将在它之前被删除有机会“定义”六行删除。可能可以接受,但要记住一些事情。
这个简单的 perl 脚本将删除包含单词“DELETE6”的每一行和 5 个连续的行(总共 6 个)。它还将以前版本的文件保存在 FILENAME.bak 中。运行脚本:
perl script.pl FILE_TO_CHANGE
#!/usr/bin/perl
use strict;
use warnings;
my $remove_count = 6;
my $word = "DELETE6";
local $^I = ".bak";
my $delete_count = 0;
while (<>) {
$delete_count = $remove_count if /$word/;
print if $delete_count <= 0;
$delete_count--;
}
HTH
【讨论】:
perl -i.bak -n -e '$n ++; $n = -5 if /foo/; print if $n > 0' data.txt
【讨论】:
perl -ne 'print unless (/my_word/ and $n = 1) .. ++$n == 7'
请注意,如果my_word 出现在跳过的行中,则不会重置计数器。
【讨论】: