免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5403 | 回复: 2

[Linux资讯] 问一个关于shell获取列表内容的问题 [复制链接]

论坛徽章:
0
发表于 2019-04-09 18:02 |显示全部楼层
大家好,提个问题。麻烦大佬解答一下我的疑问问一个关于shell获取列表内容的问题
在linux  中怎么获取 一个文本中的某个列表名,它对应里面对应的内容。然后我还需求去调用这些内容
比如这个:
[diyige]
12
65
21
54
95
[sansan]
122
541
214
151
148
.
.
.
我现在想获取[diyige]  这个列表中的内容,而且我需要用到它里面每一行的内容(以行的方式进行调用)

论坛徽章:
0
发表于 2019-04-09 18:53 |显示全部楼层
这个跟absible 的inventory文件  类似。不知道是不是仅仅是ansible能使用的?!!

论坛徽章:
0
发表于 2019-05-04 20:14 |显示全部楼层
本帖最后由 wesk2730top 于 2019-05-04 21:08 编辑

ansible没用过,不过就楼主提的三点问题回答一下。

1.获取配置文件列表名
# grep '^\[.*\]$' my.cnf    #获取my.cnf列表名称

2.获取指定列表内容,# sh test.sh my.cnf mysqld      #执行脚本,位置变量1为配置文件,2为列表名

[root@mysql ~]# cat test.sh
#!/bin/bash
a=$2
b=`grep '\[.*\]' $1 | sed 's/\[//;s/\]//' | grep -A1 "^$2$" | grep -v "^$2$"`
sed -n "/\[$a\]/,/\[$b\]/p" $1 | awk 'NR>1' | sed '$d'
c=`grep '^\[.*\]$' my.cnf | sed 's/\[//;s/\]//' | tail -1`

if [ $2 == $c ]
then
        tail -1 $1
fi


3.调用指定内容,for循环,每行后面加“===”
[root@mysql ~]# cat test1.sh
#!/bin/bash
for i in `sh test.sh $1 $2`
do echo "$i==="
done


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP