如何sed
在匹配后删除第二行(或任何数字)但不包括匹配和中间的行?
例如:
Enter command below
> login
Command valid
Enter your password at the below prompt
Remember to make sure no-one is looking at your screen
> mysecretword
Password accepted
我只想删除“> mysecretword”行,因为它是“在下面的提示符处输入密码”行之后的两行。我不能使用绝对行号位置,因为匹配可以在文件开始后出现任意数量的行。
在线搜索我找到了很多解决方案,例如sed '/Enter your password.*/,+3d' filex
,但这也会删除“输入您的密码...”行和以下行,这不是我想要的。我只想删除一行,即匹配后的一定数量的行。
我怎么能用sed
(或任何其他常用工具)做到这一点?
也许
或等效地:
对于一般情况,请参阅 Ed Morton 的出色回答:使用 sed 或 awk 在匹配模式之后打印一行 。
申请给定的输入
/^Enter your password/{c=2} 1
这c
是匹配后的第 n 行被忽略,1
打印输入记录c && !--c{next}
是&&
短路运算符,因此只要c
评估为假,c
就不会递减。设置为一个值之后c
,只要没有达到就会递减0