指定された行の後のテキストファイルの終わりを削除する方法

指定された行の後のテキストファイルの終わりを削除する方法

テキストファイルがあり、その== 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 番目にはその行以降のすべての行が含まれます。

関連情報