2

给定以下文件

$ 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
4

4 回答 4

3

一种方法:

sed '/fox/{s/fox/\n/;D}' input 
于 2013-02-25T07:59:58.083 回答
2

这可能对您有用(GNU sed):

 sed 's/fox/\n/;T;D' file
于 2013-02-25T17:01:47.203 回答
1

这是完整的帮助文本:

删除模式空间中的文本直到第一个换行符。如果留下任何文本,则使用生成的模式空间重新启动循环(不读取新的输入行),否则开始正常的新循环。

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

如果您真的想使用perreal 的D答案,或者您可能更喜欢使用条件分支(或仅限 GNU )。这是一个 GNU 和 BSD 兼容的版本:tT

解析.sed

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

像这样运行它:

sed -f parse.sed a.txt

输出:

 jumps over the lazy dog
于 2013-02-25T08:21:26.530 回答
0

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

$ sed 's/fox/\r/' a.txt
 jumps over the lazy dog
于 2013-03-29T01:14:27.623 回答