给出以下文件
$ 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
答案 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