我的文件中包含這樣的如何從線提取特定消息的bash
aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}
我想提取每行{}
之間的mesage線。如果{}
之間沒有消息,則返回空消息。
如何在bash中做到這一點?
我的文件中包含這樣的如何從線提取特定消息的bash
aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}
我想提取每行{}
之間的mesage線。如果{}
之間沒有消息,則返回空消息。
如何在bash中做到這一點?
嘗試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"
此命令設置分隔符是大括號。
如果您grep
支持正面和負面的外觀變通:
grep -oP '(?<={).*(?=})' inputfile
"eee": "ggg", "mmm": "sss"
"eee": "ggg"
"eee": "ggg", "mmm": "sss"
這將檢查在{
和}
之間的任何東西。這等於.*?
及其非貪心。
可以簡化爲'grep -oP'{\ K [^}] +'' – Sundeep
by'return empty message'你是指空行還是空行? – Sundeep