我正在尝试从数百个文件中删除一块文本。每行要删除的行数并不相同,但它们都以相同的字符串开头。我希望从 $PATTERN
## Table
中删除整个文本块,然后选择所有文本,直到出现换行符。我对 sed
很“满意”,但用谷歌搜索却一无所获。
text.txt内容:
Random text.
## Table of Contents
* [Design System](#<b>Design-System</b>)
* [Multisite Designs](#Multisite)
* [Recommended Changes Per Site](#mcetoc_123)
* [Recommended Consistent Elements Across Sites](#mcetoc_456)
* [Templates v. Pages](#Templates-v-Pages)
* [Layouts](#mcetoc_dfghj)
* [Features](#Features)
* [Something](#mcetoc_khjvfsdfsd)
* [Feature](#mcetoc_dfwyduegwu)
* [See More Logic](#mcetoc_fdsfsdugfs)
* [Advertising, and Print](#Advertising-and-Print)
* [Images](#Images)
* [Featured Image)](#mcetoc_fghjk)
* [Videos](#Videos)
* [Video Art](#mcetoc_4567890)
* [Author and Search Pages](#Author-Tag-and-Search-Pages)
* [Accessibility](#Accessibility)
Then here is some text.
Here is more text!
text.txt 期望的结果:
Random text.
Then here is some text.
Here is more text!
我不关心清理多余的换行符,只需删除以
## Table
开头并以第一个换行符结尾的块。
我尝试了很多在网上找到的
sed
示例,但没有一个能满足我的需要,而且显然这更复杂。
不知道您尝试过哪些
sed
命令,但是...
您匹配字符串的实际模式是什么? 为简单起见,我假设它是行的开头,后跟任意数量的空格,然后是星号或散列。 这将是一个正则表达式
^\s*[*#]
因此我们构建一个 sed 表达式来删除与此模式匹配的所有行:
sed -e '/^\s*[*#]/d' test.txt