删除包含某个单词的前三行

问题描述 投票:0回答:1

我在使用

sed
命令时遇到了一些麻烦。我需要从文件中删除包含指定单词的前 3 行。

我的

sed
命令仅检查前 6 行,无论它们是否包含该单词。它会删除包含该单词的行,但会在 6 行之后停止,而不是在包含该单词的 3 行之后停止。

这是我的命令:

sed "1,6{/.*$word.*/d;}" "$filename"`

所以,例如,我想删除包含“请”一词的前3行,对于文件内容:

leave this line alone
leave this line alone
1 please delete this line
leave this line alone
2 please delete this line
leave this line alone
leave this line alone
3 please delete this line
leave this line alone

输出为:

leave this line alone
leave this line alone
leave this line alone
leave this line alone
leave this line alone
3 please delete this line
leave this line alone
shell sed
1个回答
0
投票

如评论中所述,

awk
解决方案很简单。

例如:

awk '!index($0,q) || ++c>n' n=3 q=please "$filename"

尝试用

sed
数数不是很方便,尽管这是可能的。

参数化参数也很复杂。

忽略这两个问题,这里有一个 sed 脚本,用于删除前 3 次出现的包含“please”的行:

sed '
    1 {
        x
        s/^/.../
        x
    }
    /please/ {
        x
        s/.//
        x
        t del
        b
:del
        d
    }
' "$filename"

将任一脚本应用于:

1 leave this line alone
2 leave this line alone
1 please delete this line
3 leave this line alone
2 please delete this line
4 leave this line alone
5 leave this line alone
3 please delete this line
6 leave this line alone
4 please leave this line alone
7 leave this line alone

产生:

1 leave this line alone
2 leave this line alone
3 leave this line alone
4 leave this line alone
5 leave this line alone
6 leave this line alone
4 please leave this line alone
7 leave this line alone
© www.soinside.com 2019 - 2024. All rights reserved.