我有一个字符串为:
MESSAGES { "Instance":[{"InstanceID":"i-098098"}] } ff23710b29c0220849d4d4eded562770 45c391f7-ea54-47ee-9970-34957336e0b8
我需要提取部分{ "Instance":[{"InstanceID":"i-098098"}] }
即从第一次出现的"{"到最后一次出现的"}"并将其保存在单独的文件中。
如果你在文件中有这个,
sed 's/^[^{]*//;s/[^}]*$//' file
(这将打印到标准输出。 重定向到文件或捕获到变量中,或者执行任何您想对其执行的操作。
如果你在一个名为 MESSAGES
的变量中有这个,
EXTRACTED=${MESSAGES#*{}
EXTRACTED="{${EXTRACTED%}*}}"
我建议从这篇文章中sed
或awk
。但是初步测试表明它有点复杂,您可能必须使用组合或管道:
echo "MESSAGES { "Instance":[{"InstanceID":"i-098098"}] } ff23710b29c0220849d4d4eded562770 45c391f7-ea54-47ee-9970-34957336e0b8" | sed 's/^(.*)}.*$/1}/' | sed 's/^[^{]*{/{/'
因此,第一个sed
删除最后一个}
之后的所有内容,并将其替换为}
,以便它仍然显示;第二个sed
删除第一个{
之前的所有内容,并将其替换为{
,以便它仍然显示。
这是我得到的输出:
{ Instance:[{InstanceID:i-098098}] }