我的文件包含类似的行
aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}
我想从每一行中提取{}
之间的消息。如果{}
之间没有消息,则返回空消息。
如何在bash中做到这一点?
答案 0 :(得分:2)
尝试awk -
$cat file
aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}
$awk -F[{}] '{print $2}' file
Output-
"eee": "ggg", "mmm": "sss"
"eee": "ggg"
"eee": "ggg", "mmm": "sss"
此命令将分隔符设置为大括号。
答案 1 :(得分:0)
如果您的grep
支持正面和负面展示:
grep -oP '(?<={).*(?=})' inputfile
"eee": "ggg", "mmm": "sss"
"eee": "ggg"
"eee": "ggg", "mmm": "sss"
这会检查{
和}
之间的任何内容。这等于.*?
而非贪婪。