Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用bash从行中提取特定消息_Linux_Bash_Shell_Awk_Sed - Fatal编程技术网

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[^}]+'