Chinaunix

标题: 求解用shell在文件中取得特定数据,并且定义为变量! [打印本页]

作者: t895    时间: 2016-06-18 02:10
标题: 求解用shell在文件中取得特定数据,并且定义为变量!
本帖最后由 t895 于 2016-06-18 02:12 编辑

配置文件里面有非常多的数据,其中有两行是这样的
  1. "server_port": 2288,
  2. "password": "529670",
复制代码
我想用
  1. shell命令cat awk grep sed任意一种
复制代码
取出2288或者529670这组数字并且定义为变量
如:
  1. sdname=$(sed -n '/server_port/p' /etc/video.json)
复制代码
但是它输出为
  1. "server_port": 2288,
复制代码
但是我只要其
  1. 2288
复制代码
的数字,其他都不要,请问大神门该如何写这个命令?

作者: wjemail    时间: 2016-06-18 05:11
  1. sdname=$(sed -n '/server/ s/[^0-9]*\([0-9]*\).*/\1/g p' q12)
复制代码

作者: Herowinter    时间: 2016-06-18 06:29
回复 1# t895
  1. sdname=`grep -Po '(?<="server_port": )\d*' /etc/video.json`
复制代码

作者: moperyblue    时间: 2016-06-18 08:33
  1. sed -nr '/server_port/s/.*:\s*([0-9]+).*/\1/p'
  2. sed -nr '/password/s/.*:\s*"([^"]*).*/\1/p'
复制代码

作者: 过过招    时间: 2016-06-18 10:31
var=`grep -o "[0-9]\+" urfile`
作者: t895    时间: 2016-06-18 10:45
回复 2# wjemail

这个命令可以,但是不知道为啥多了一个3?是什么情况
sed -n '/server/ s/[^0-9]*\([0-9]*\).*/\1/g p' /etc/video.json
3
2288

这个3好像是"server_port": 2288,上一行的数字!
作者: t895    时间: 2016-06-18 10:46
回复 3# Herowinter

这个把文件里面所有的数字都打印出来了
作者: wjemail    时间: 2016-06-19 03:02
回复 6# t895

命令中的/server/是用来处理指定行的,如果你的文件中有几行匹配,就会有问题了。可以考虑根据你的文件把匹配修改的更精确。


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2