如何删除某个区域内的特定行?

如何删除某个区域内的特定行?

我想删除 YAML 前面的一些特定行:

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

假设我只想删除前面内容中包含“标题:”和“地点:”的行

为了确保我不会删除包含这些单词的任何其他行,它应该只搜索前面的内容。此外,任何解决方案优选地不使用行号而是使用实际单词作为其选择标准。

任何帮助将不胜感激,谢谢。


我自己的研究包括:

- 一次删除多个单词

和这个- 选择文件的特定区域

答案1

不熟悉YFM( YAML front matter) 但根据此页面必须是文件中的第一个内容,并且必须采用三虚线之间设置的有效 YAML 的形式。这意味着您的文件将始终以---if YFMis present 开头,因此您可以运行:

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

即如果第一行与 uit 不匹配--- q,否则d删除与这些模式匹配的所有行(如果它们出现在1st 行和下一行匹配之间)---
如果第二个标记...只是更改第二个sed表达式,但请注意要匹配文字点,您'必须转义它,例如以匹配...您将使用\.\.\.\.\{3\}):

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

答案2

除了 heemayl 的 sed 解决方案之外,还有一个 grep 选项:

grep -Ev '^Title:|^Place:' file.txt

解释:

  • grep -v 忽略包含 Title: 或 Place: 的行
  • grep -E 堆叠两个术语
  • ^ 表示模式应位于行的开头

相关内容