我想在 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 跨越多条线,我就无法正常工作。所以我的问题是:如何让它适用于拉伸多行的字符串?