Bash在两个带有特殊字符的字符串之间获取文本
我正在为Domoticz编写一个脚本,它可以通过gamertag查询读取我的Xbox One。但我需要从一些特殊字符中提取。无法找到任何解决方案,我可以使用,GREP,TR,AWK,SED等。最好是一行代码。Bash在两个带有特殊字符的字符串之间获取文本
这是字符串:
{"type":"XboxOne","titles":[{"id":714681658,"name":"Home","placement":"Background","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"},{"id":252034287,"activity":{"richPresence":"In Main Menu"},"name":"The Elder Scrolls V: Skyrim Special Edition","placement":"Background","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"},{"id":1693425033,"name":"Spotify Music - for Test","placement":"Full","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"}]},{"type":"WindowsOneCore","titles":[{"id":328178078,"name":"Xbox App","placement":"Full","state":"Active","lastModified":"2017-08-26T19:53:40.7273986Z"}]}]}
这是一个行代码,我只会从{“类型”:“XboxOne直到}需要。]},所以我只有我的控制台信息,但这些有特殊字符,我在寻找高和低,但找不到任何解决办法。
这是字符串我最终会。
{"type":"XboxOne","titles":[{"id":714681658,"name":"Home","placement":"Background","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"},{"id":252034287,"activity":{"richPresence":"In Main Menu"},"name":"The Elder Scrolls V: Skyrim Special Edition","placement":"Background","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"},{"id":1693425033,"name":"Spotify Music - for Test","placement":"Full","state":"Active","lastModified":"2017-08-26T19:56:33.9199136Z"}]},
任何帮助将不胜感激!
个感谢,
一个衬垫
cat filename | grep -oP '\{"type":"XboxOne".*?(?=,{"type")'
简要说明:(?=,{"type")
:一旦模式,{"type"
发现.*?
停止匹配:做懒匹配和捕捉一切,直到第一个匹配,{"type"
(对于情况下,如果你在json中有多个对象)
在所有有用的帖子中,我一直在寻找这个帖子。谢谢!!! – cl3tus
它可以与GAWK这样的脚本来完成:
script.awk
BEGIN { RS="}]}";
tgt="{\"type\":\"XboxOne"
}
{ p=index($0, tgt);
if(p) printf("%s%s\n\n", substr($0, p), RS)
}
使用方法如下:awk -f script.awk yourfile
说明 这个想法是使用静态字符串ins tead正则表达式以尽量减少特殊字符的溢出。这是这样完成的:
- 的
RS
记录分隔符被设置为恒定串}]}
每个记录在这样的刺结束,而不是在行结束 -
tgt
也用作参数的index
常量字符串功能,我们只需要逃避双引号
如果找到tgt
(即p>0
),我们从打印的p
子录制结束(这是文达,但不包括}]}
),我们另外打印出RS
。
您可以将脚本放入单行参数awk
(我已添加必要的;
),但为了清晰起见,我将其放入多行脚本中。
这是一个sed
解决方案,
sed 's/,{"type".*$/,/g' file
该命令将替换匹配正则表达式,"type".*$
的字符串到,
,它们也符合您的请求。
我不确定你到底想要什么。输入和输出字符串看起来是一样的 –
,它们都是一英里宽。你不能把这个归结为10个字符的数据和2个字符的“特殊字符”? (或者至少是不需要滚动的东西?)。这看起来像json数据。有工具可用于处理它。 (不是专家,其他人可能会提供帮助)。祝你好运。 – shellter
@minhtuannguyen第二个字符串是第一个字符串的子字符串。 –