如何使用bash从一行中提取特定的消息

时间:2016-11-24 07:58:34

标签: linux bash shell awk sed

我的文件包含类似的行

aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2 
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}

我想从每一行中提取{}之间的消息。如果{}之间没有消息,则返回空消息。

如何在bash中做到这一点?

2 个答案:

答案 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"

这会检查{}之间的任何内容。这等于.*?而非贪婪。