删除行的第一部分

时间:2013-02-25 07:54:06

标签: bash sed

给出以下文件

$ cat a.txt
The quick brown fox jumps over the lazy dog

我可以使用sed

轻松删除第一部分
$ sed 's/.*fox//' a.txt
 jumps over the lazy dog

我尝试使用D选项

聪明一点
D      Delete  up  to  the first embedded newline in the pattern space.

例如

$ sed 's/fox/\n/; D' a.txt

然而,这没有输出。是否可以使用sed选项使用D选项删除某一行的第一部分,类似于我尝试的内容?

如果fox之前的部分比之后的部分短,则此方法有效。

$ sed 's/fox/\r/' a.txt
 jumps over the lazy dog

3 个答案:

答案 0 :(得分:3)

一种方法:

sed '/fox/{s/fox/\n/;D}' input 

答案 1 :(得分:2)

这可能适合你(GNU sed):

 sed 's/fox/\n/;T;D' file

答案 2 :(得分:1)

以下是完整的帮助文本:

  

删除模式空间中的文本,直到第一个换行符。如果有任何文字   离开,重新启动循环与结果模式空间(没有   读取新的输入行),否则启动正常的新循环。

您的示例不起作用,因为D将重新启动循环并继续删除行,直到没有剩余。

如果你真的想使用D perreal的答案会做,或者你可能更喜欢使用条件分支(t或仅GNU T )。这是GNU和BSD兼容版本:

parse.sed

s/fox/\
/
t del
b
:del
D

像这样运行:

sed -f parse.sed a.txt

输出:

 jumps over the lazy dog