テキストファイルがあり、その== 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にはよく知られている2つの用途があります。基本的な検索と置換s///
と範囲ベースの操作/beginpattern/,/endpattern/X
。ここで X は sed 操作です。Dエイレット、S検索と置換...セミコロン(;)を含む構文は、プログラミングに適しており、理解するのが難しいです。
答え3
csplit -f newfile -n1 infile /==\ Changelog\ ==/
これは生成され./newfile0
、./newfile1
(GNUcsplit
またはPOSIXlyを使用./newfile[12]
)。 1 番目には一致する行が最初に表示される前のすべての行が含まれ== Changelog ==
、2 番目にはその行以降のすべての行が含まれます。