在与sed匹配之前删除所有行

Fab*_*bio 20 regex perl awk sed pattern-matching

我正在使用sed来过滤文件列表.我有一个已排序的文件夹列表,我希望获得特定文件后的所有行.为了完成这个任务,我正在使用这里描述的解决方案,它对我尝试的任何输入都很有效,但是当匹配在第一行时它不起作用.在这种情况下,sed将删除输入的所有行

这是一个例子:

(ssh) fabio@s2 : ~
[0] % ls -1 /
bin
boot
...
sys
tmp
usr
var
vmlinuz

(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/tmp/d'
usr
var
vmlinuz

(ssh) fabio@s2 : ~
[0] % ls -1 / | sed '1,/^bin$/d'
# sed will delete all lines from the input stream
Run Code Online (Sandbox Code Playgroud)

当regexp匹配第一行时,我应该如何更改命令以考虑极限情况?

BTW sed '1,1d'正确工作并仅删除第一行.

End*_*oro 23

试试这个(仅限GNU sed):

sed '0,/^bin$/d'
Run Code Online (Sandbox Code Playgroud)

..output是:

$sed '0,/^bin$/d' file
boot
...
sys
tmp
usr
var
vmlinuz


ada*_*mse 23

sed命令将打印包括匹配行之后的所有行:

sed -n '/^WHATEVER$/,$p'
Run Code Online (Sandbox Code Playgroud)

只有在告知(命令)时,-n开关sed才会打印p.

如果您不想包含匹配的行,您可以告诉sed从文件的开头删除到匹配的行:

sed '1,/^WHATEVER$/d'
Run Code Online (Sandbox Code Playgroud)

(我们使用d删除行的命令.)


Vij*_*jay 6

你也可以尝试:

awk '/searchname/{p=1;next}{if(p){print}}'
Run Code Online (Sandbox Code Playgroud)