我有一个类似的文本文件
some
important
content
goes here
---from here--
some
unwanted content
我正在尝试删除---from here--
之后的所有行,包括---from here--
。也就是说,所需的输出是
some
important
content
goes here
我尝试了sed '1,/---from here--/!d' input.txt
,但并未删除---from here--
部分。如果我使用sed '/---from here--.*/d' input.txt
,则只会删除---from here--
文本。
如何删除包含该图案的图案后的行?
编辑
我可以通过执行第一个操作并将其输出传递给第二个输出来实现,例如sed '1,/---from here--/!d' input.txt | sed '/---from here--.*/d' > outputput.txt
。
有单步解决方案吗?
答案 0 :(得分:3)
使用sed的另一种方法:
sed '/---from here--/,$d' file
d
(删除)命令适用于从包含---from here--
的第一行到文件($
)末尾的所有行
答案 1 :(得分:2)
另一种awk方法:
awk '/---from here--/{exit}1' file
如果您具有GNU awk 4.1.0+,则可以添加-i inplace
来就地更改文件。
否则请申请| tee file
来就地更改文件。
答案 2 :(得分:1)
请尝试以下操作(如果您对awk
感到满意)。
awk '/--from here--/{found_from=1} !found_from{print}' Input_file
答案 3 :(得分:1)
我不是很肯定,但是我相信这会起作用:
sed -n '/---from here--/q; p' file
q
命令告诉sed
在匹配给定行之后退出处理输入行。
答案 4 :(得分:0)
您可以尝试Perl
perl -ne ' $x++ if /---from here--/; print if !$x '
使用您的输入。
$ cat johnykutty.txt
some
important
content
goes here
---from here--
some
unwanted content
$ perl -ne ' $x++ if /---from here--/; print if !$x ' johnykutty.txt
some
important
content
goes here
$