有类似如下的单行json数据,希望提取其中的 add 字段
[code language=”json”]
[{”:False,’host’:”,’path’:”,’id’:’replace_yourself’,’tls’:”,’v’:’2′,’net’:’tcp’,’add’:’1.1.1.1′,’type’:’none’},{”:False,’host’:”,’path’:”,’tls’:”,’id’:’replace_yourself’,’v’:’2′,’aid’:’2′,’net’:’tcp’,’add’:’2.2.2.2′,’type’:’none’}]
[/code]
- 先用tr命令,将数组每个元素分行
[code language=”bash”]
tr ‘}’ ‘\n’
[/code]
2. 利用正则表达式找出 add 字段及其网址,并在前后加上换行符
[code language=”bash”]
sed ‘s/\(\"add\": \"[0-9.a-z\-]\+\"\)/\n\1\n/g’
[/code]
完整命令
[code language=”bash”]
cat json.dat |tr ‘}’ ‘\n’ |sed ‘s/\(\"add\": \"[0-9.a-z\-]\+\"\)/\n\1\n/g’ | grep "add"
[/code]
sed 使用心得:
a. 元组选择符圆括号前后要加上反斜杠;
b. 加号通配符前也要加上反斜杠
c. \1, \2 代表正则匹配的第几个元组