我在使用
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
如评论中所述,
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