我想在UNIX中使用 sed 在两个字符串之间提取内容。我知道 sed 只适用于一行但在我的情况下,我想提取多行的内容。
为了让您了解情况,这里有一个字符串变量,其中包含我想要提取的行和我想忽略的行:
x.ClosePrice
现在我想在" Title1"之间提取部分。和#34; Title2"包括" Title1"并将内容保存到名为" RELEVANT"的变量中。在该变量上使用 echo 应该给我这个所需的输出:
proccessing_data['Max'] = proccessing_data.groupby('Symbol').ClosePrice.transform('max')
# specify the column to transform here ^^^^^^^^^^
proccessing_data['RSI'] = proccessing_data.groupby('Symbol').ClosePrice.transform(lambda x: talib.RSI(x, timeperiod=14))
# specify the column to transform here ^^^^^^^^^^
我的尝试是:
VAR="Unrelevant
Unrelevant
Title1
Relevant
Relevant
Title2
Unrelevant"
但这只是在VAR是一个单行时才有效:
Title1
Relevant
Relevant
"部分",因为输出是:
RELEVANT=(echo "$VAR" | sed -e 's/.*Title1\(.*\)Title2.*/\1/g'))
...在第一个"相关"之前有一个空格,它不应该在那里,没有前面的" Title1"。
嗯,除此之外,如果VAR超过多行,我无法正常工作。所以我的问题是:我如何使用一个拉伸多行的字符串?
答案 0 :(得分:2)
以下是sed
解决方案:
echo "$var" | sed -n '/^Title1$/,/^Title2$/p' | sed '$d'
Title1
Relevant
Relevant
-n
会抑制正常输出sed
命令匹配2个模式之间的文本,并使用p
命令sed
命令只是跳过最后一行,这给了我们想要的输出。或使用单个sed
:
echo "$var" | sed -n '/^Title1$/,/^Title2$/{/^Title2$/!p;}'
Title1
Relevant
Relevant