在大括号之间提取文本

时间:2014-08-28 06:38:58

标签: linux shell braces

我有一个字符串:

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

我需要提取部分{ "Instance":[{"InstanceID":"i-098098"}] },即从第一次出现{' {'持续发生的'}'并将其保存在单独的文件中。

2 个答案:

答案 0 :(得分:0)

如果你在文件中有这个,

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

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

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

中有这个
EXTRACTED=${MESSAGES#*{}
EXTRACTED="{${EXTRACTED%\}*}}"

答案 1 :(得分:0)

我建议来自this articlesedawk。但初步测试表明它有点复杂,你可能不得不使用组合或管道:

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

因此,第一个sed删除了上一个}之后的所有内容,并将其替换为},以便它仍然显示;第二个sed删除第一个{的所有内容,并将其替换为{,以便它仍显示。

这是我得到的输出:

{ Instance:[{InstanceID:i-098098}] }