如何找到以 $PATTERN 开头并以 $LINEBREAK 结尾的字符串块

问题描述 投票:0回答:1

我正在尝试从数百个文件中删除一块文本。每行要删除的行数并不相同,但它们都以相同的字符串开头。我希望从 $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
示例,但没有一个能满足我的需要,而且显然这更复杂。

awk sed
1个回答
0
投票

不知道您尝试过哪些

sed
命令,但是...

您匹配字符串的实际模式是什么? 为简单起见,我假设它是行的开头,后跟任意数量的空格,然后是星号或散列。 这将是一个正则表达式

^\s*[*#]

因此我们构建一个 sed 表达式来删除与此模式匹配的所有行:

sed -e '/^\s*[*#]/d' test.txt
© www.soinside.com 2019 - 2024. All rights reserved.