我正在使用sed来过滤文件列表。我有一个已排序的文件夹列表,我希望获得特定文件后的所有行。为了完成这个任务我正在使用here描述的解决方案,它对我尝试的任何输入都很有效,但是当匹配在第一行时它不起作用。在这种情况下,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
当regexp匹配第一行时,如何更改命令以考虑极限情况?</ p>
BTW sed '1,1d'
正确工作,只删除第一行。
答案 0 :(得分:21)
试试这个(仅限GNU sed):
sed '0,/^bin$/d'
..输出是:
$sed '0,/^bin$/d' file boot ... sys tmp usr var vmlinuz
答案 1 :(得分:21)
此sed
命令将打印匹配行之后的所有行:
sed -n '/^WHATEVER$/,$p'
-n
开关只有在被告知sed
命令时才会打印p
。
如果您不想包含匹配的行,您可以告诉sed从文件的开头删除到匹配的行:
sed '1,/^WHATEVER$/d'
(我们使用删除行的d
命令。)
答案 2 :(得分:6)
您也可以尝试:
awk '/searchname/{p=1;next}{if(p){print}}'
答案 3 :(得分:0)
我会在匹配之前插入一个标签,并在范围/start/,/####tag####/
中删除。