Linux 如何使用bash从行中提取特定消息
我的文件包含这样的行Linux 如何使用bash从行中提取特定消息,linux,bash,shell,awk,sed,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"} 我想从每一行中提取{}之间的mesage。如果{}之间没有消息,则返回空消息 如何在bash中做到这一点?如果您的grep支持正面和负面环视: grep -oP '(?<={).*(?=})' inputfile "e
aaa bbb ccc {"eee": "ggg", "mmm": "sss"}
aaa1 bbb1 {"eee": "ggg"}
aaa2 bbb2 ccc2
aaa3 bbb3 ccc3 {"eee": "ggg", "mmm": "sss"}
我想从每一行中提取{}
之间的mesage。如果{}
之间没有消息,则返回空消息
如何在bash中做到这一点?如果您的
grep
支持正面和负面环视:
grep -oP '(?<={).*(?=})' inputfile
"eee": "ggg", "mmm": "sss"
"eee": "ggg"
"eee": "ggg", "mmm": "sss"
grep-oP'(?试试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-oP'{\K[^}]+'
?