Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在与sed匹配之前删除所有行_Sed - Fatal编程技术网

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

在与sed匹配之前删除所有行,sed,Sed,我正在使用sed筛选文件列表。我有一个文件夹的排序列表,我想得到一个特定的一行之后的所有行。为了完成这项任务,我使用了描述的解决方案,该解决方案对我尝试的任何输入都非常有效,但当匹配在第一行时,它就不起作用了。在这种情况下,sed将删除输入的所有行 下面是一个例子: $ ls -1 / bin boot ... sys tmp usr var vmlinuz $ ls -1 / | sed '1,/tmp/d' usr var vmlinuz $ ls -1 / | sed '1,/^bin

我正在使用sed筛选文件列表。我有一个文件夹的排序列表,我想得到一个特定的一行之后的所有行。为了完成这项任务,我使用了描述的解决方案,该解决方案对我尝试的任何输入都非常有效,但当匹配在第一行时,它就不起作用了。在这种情况下,sed将删除输入的所有行

下面是一个例子:

$ ls -1 /
bin
boot
...
sys
tmp
usr
var
vmlinuz

$ ls -1 / | sed '1,/tmp/d'
usr
var
vmlinuz

$ ls -1 / | sed '1,/^bin$/d'
# sed will delete all lines from the input stream

如何更改命令以考虑第一行由ReGEXP?< /P>匹配时的极限情况? 顺便说一句,sed'1,1d'工作正常,仅删除第一行。

尝试此操作(仅GNU sed):

…输出为:

$sed '0,/^bin$/d' file boot ... sys tmp usr var vmlinuz $sed“0,/^bin$/d”文件 靴子 ... 系统 tmp usr 变量 内核
sed
命令将打印匹配行之后的所有行,包括:

sed -n '/^WHATEVER$/,$p'
sed '1,/^WHATEVER$/d'
-n
开关仅在被告知时(使用
p
命令)使
sed
打印

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

sed -n '/^WHATEVER$/,$p'
sed '1,/^WHATEVER$/d'

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

您也可以尝试:

awk '/searchname/{p=1;next}{if(p){print}}'
编辑(考虑Joe的评论)


我会在匹配之前插入一个标记,然后在范围中删除
/start/,/######标记/

这似乎是最好的选择。我看到了你之前的回答,其中指出它适用于GNU sed,现在你删除了它。我使用的是GNU-sed,所以对我来说这是正确的答案,但出于好奇,它对非GNU-sed有效吗?没有GNU特定的命令,它应该有效,告诉我我的教科书。它在OSX-sed上不起作用,但正如我告诉你的,我需要它在GNU系统上。啊<代码>0,/\u地址/是GNU增强,应该适合您。为了完整性。要删除遵循特定模式的所有行,请执行以下操作:
sed-E'/^something$/,$d'
,其中
-E
是POSIX可移植性扩展正则表达式。我也研究了此选项,由于包含匹配行,所以退出。我错过了
tail-n+2
选项。所以这也很好。谢谢,你救了我一天。非常简单易懂,功能齐全。如果包含匹配行,肯定是最好的答案。实际上,如果使用-n语法,它将包含匹配行。如果使用第二个表单(sed'1,/^WHATEVER$/d'),则不会。(在RHEL 7 Linux上的sed 4.2.2上测试)。sed“1,/^whater$/d”和sed“0,/^whater$/d”之间有什么区别?他们为我提供了相同的结果,请你发表评论。更正并添加了一些其他解决方案。相关的:此脚本可以工作,但是在第一次出现后,它会删除所有地方的“searchname”。其他解决方案不会删除它们,它们只删除第一个引用和之前的行it@JoeJobs,请找到编辑