2016-11-24 21 views
-2

我的文件中包含這樣的如何從線提取特定消息的bash

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

我想提取每行{}之間的mesage線。如果{}之間沒有消息,則返回空消息。

如何在bash中做到這一點?

+1

by'return empty message'你是指空行還是空行? – Sundeep

回答

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" 

此命令設置分隔符是大括號。

0

如果您grep支持正面和負面的外觀變通:

grep -oP '(?<={).*(?=})' inputfile 
"eee": "ggg", "mmm": "sss" 
"eee": "ggg" 
"eee": "ggg", "mmm": "sss" 

這將檢查在{}之間的任何東西。這等於.*?及其非貪心。

+0

可以簡化爲'grep -oP'{\ K [^}] +'' – Sundeep