範囲内の特定の行を削除する方法は?

範囲内の特定の行を削除する方法は?

YAMLの前にある特定の行を削除したいです。

---
Author: aaaa
Title: bbbb
Time: cccc
Place: dddd
...

前のコンテンツから「タイトル:」と「場所:」を含む行のみを削除したいとします。

この単語を含む他の行を削​​除したくない場合は、前の単語のみを検索する必要があります。さらに、すべての解決策では、行番号を使用せずに実際の単語を選択基準として使用することが望ましいです。

どんな助けでも大変感謝します。ありがとうございます。


私の研究には以下が含まれます。

これ- 一度に複数の単語を削除

この- ファイルの特定領域の選択

ベストアンサー1

YFMYAML front matter)には慣れていませんが、このページによるとそれファイルの最初のコンテンツでなければならず、3つの点線の間に設定された有効なYAML形式でなければなりません。。これは、ファイルが常に存在する---場合から始まるため、YFM以下を実行できることを意味します。

sed -n '1{/^---$/!q};1,/^---$/{/^Title: \|^Place: /d};p' infile

つまり、最初の行がuitと一致しない--- q場合、2番目のタグが2番目の式を変更すると、これらのパターンに一致するすべての行が削除されます(最初の行と次の行の一致の間にd表示される場合)。ただし、リテラルポイントと一致するように注意してください。たとえば、一致させるには、または)を使用してエスケープする必要があります。1---
...sed...\.\.\.\.\{3\}

sed -n '1{/^---$/!q};1,/^\.\.\.$/{/^Title: \|^Place: /d};p' infile

おすすめ記事