如何在指定行之后删除文本文件的末尾

如何在指定行之后删除文本文件的末尾

我有== Changelog ==一个文本文件,我想创建一个新文件,其中该行及其后的所有内容都将被删除。

我确信答案就在某个地方,我曾尝试寻找,但现在我的头在旋转。sed, awk, csplit, ...

答案1

使用 awk:

awk '/Changelog/{exit}1' file > newfile

或使用 sed:

sed -n '/Changelog/q;p' file > newfile

答案2

我会用sed

sed '/== Changelog ==/,$d' file > newfile

这种语法比 jasonwryan 上面提出的语法效率低,但对大多数人来说更易读。 sed 有两个著名的用途:基本搜索和替换s///以及基于范围的操作/beginpattern/,/endpattern/X,其中 X 是 sed 操作,例如d埃莱特,s搜索替换...任何带有分号 (;) 的结构都更具编程性且不易理解。

答案3

csplit -f newfile -n1 infile /==\ Changelog\ ==/ 

这将创造./newfile0./newfile1 (使用 GNUcsplit或 POSIXly ./newfile[12]。第一个将包含第一个出现的匹配行之前的所有行== Changelog ==,第二个将包含该行之后的所有行。

相关内容