我有== 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 ==
,第二个将包含该行之后的所有行。