小编Two*_*-Tu的帖子

正则表达式:使用 sed 在多行中提取两个字符串之间的内容

我想在 UNIX 中使用sed提取两个字符串之间的内容。我知道sed仅适用于一行,但就我而言,我想提取跨多行的内容。

为了让您了解情况,这里有一个字符串变量,其中包含我想要提取的行和我想要忽略的行:

VAR="Unrelevant
Unrelevant
Title1
Relevant
Relevant
Title2
Unrelevant"
Run Code Online (Sandbox Code Playgroud)

现在我想提取“Title1”和“Title2”之间的部分(包括“Title1”)并将内容保存到名为“RELEVANT”的变量中。在该变量上使用echo应该给我这个所需的输出:

Title1
Relevant
Relevant
Run Code Online (Sandbox Code Playgroud)

我的尝试是:

RELEVANT=(echo "$VAR" | sed -e 's/.*Title1\(.*\)Title2.*/\1/g'))
Run Code Online (Sandbox Code Playgroud)

但这仅在 VAR 是一句俏皮话时才部分起作用:

VAR="Unrelevant Unrelevant Title1 Relevant Relevant Title2 Unrelevant"
Run Code Online (Sandbox Code Playgroud)

“部分”,因为输出是:

 Relevant Relevant
Run Code Online (Sandbox Code Playgroud)

...第一个“Relevant”之前有一个空格,该空格不应该存在并且没有前面的“Title1”。

好吧,除此之外,如果 VAR 跨越多条线,我就无法正常工作。所以我的问题是:如何让它适用于拉伸多行的字符串?

regex unix shell sed extract

6
推荐指数
1
解决办法
5242
查看次数

标签 统计

extract ×1

regex ×1

sed ×1

shell ×1

unix ×1