0

我有一个字符串:

MESSAGES { "Instance":[{"InstanceID":"i-098098"}] } ff23710b29c0220849d4d4eded562770 45c391f7-ea54-47ee-9970-34957336e0b8

我需要提取部分,{ "Instance":[{"InstanceID":"i-098098"}] }即从“{”的第一次出现到“}”的最后一次出现,并将其保存在单独的文件中。

4

2 回答 2

0

如果你在文件中有这个,

sed 's/^[^{]*//;s/[^}]*$//' file

(这将打印到标准输出。重定向到文件或捕获到变量中,或者做任何你想做的事情。)

如果你在一个名为 的变量中有这个MESSAGES

EXTRACTED=${MESSAGES#*{}
EXTRACTED="{${EXTRACTED%\}*}}"
于 2014-08-28T06:52:07.237 回答
0

我会建议sedawk这篇文章。但初步测试表明它有点复杂,您可能必须使用组合或管道:

echo "MESSAGES { "Instance":[{"InstanceID":"i-098098"}] } ff23710b29c0220849d4d4eded562770 45c391f7-ea54-47ee-9970-34957336e0b8" | sed 's/^\(.*\)}.*$/\1}/' | sed 's/^[^{]*{/{/'

所以第一个sed删除最后一个之后的所有内容}并将其替换为 a}所以它仍然显示;第二个sed删除第一个之前的所有内容{并将其替换为 a{所以它仍然显示。

这是我得到的输出:

{ Instance:[{InstanceID:i-098098}] }
于 2014-08-28T07:06:58.097 回答