需求描述:

  今天在做nrpe配置的时候,想要通过批量的方式来将定义文件中的IP给替换掉

  开始做的时候没有成功,报错了.在此记录下,如何实现,获取到变量的值,然后

  进行替换.

操作过程:

1.原文件的内容

[root@testvm02 hosts]# cat 192.168.53.26.cfg 
define host {     use                     linux-server
    host_name               192.168.53.26
    address                 192.168.53.26
} define service {     use                     generic-service,graphed-service           ; Name of service template to use
    host_name               192.168.53.26
    service_description     System_Load
    check_command           check_nrpe!check_load
} define service {
    use                 generic-service,graphed-service
    host_name           192.168.53.26
    service_description disk_usage
    check_command       check_nrpe!check_disk
}

2.想要拷贝出以其他的ip开头的文件,并且将其中的IP给替换掉,写了下面的脚本

#!/bin/bash

for i in `cat hostsip.dat`
do
cd /usr/local/nagios/etc/objects/hosts
echo "current ipaddress $i"
cp 192.168.53.26.cfg $i.cfg
sed -i 's/192.168.53.26/$i/g' $i.cfg
done
echo 'De@2018er' | sudo -S service nagios restart

备注:通过hostsip.dat中获取到ip,然后拷贝文件,替换其中的内容

hostsip.dat文件中内容:

[root@testvm02 tmp]# cat hostsip.dat
192.168.53.28

3.执行脚本,发现有如下报错

[root@testvm02 tmp]# sh config.sh
current ipaddress 192.168.53.28
Running configuration check...
Nagios Core 4.4.
Copyright (c) -present Nagios Core Development Team and Community Contributors
Copyright (c) - Ethan Galstad
Last Modified: --
License: GPL Website: https://www.nagios.org
Reading configuration data...
Read main config file okay...
Read object config files okay... Running pre-flight check on configuration data... Checking objects...
Checked services.
Error: The name of host '$i' contains one or more illegal characters.
Checked hosts.
Checked host groups.
Checked service groups.
Checked contacts.
Checked contact groups.
Checked commands.
Checked time periods.
Checked host escalations.
Checked service escalations.
Checking for circular paths...
Checked hosts
Checked service dependencies
Checked host dependencies
Checked timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings... Total Warnings:
Total Errors: ***> One or more problems was encountered while running the pre-flight check... Check your configuration file(s) to ensure that they contain valid
directives and data definitions. If you are upgrading from a previous
version of Nagios, you should be aware that some variables/definitions
may have been removed or modified in this version. Make sure to read
the HTML documentation regarding the config files, as well as the
'Whats New' section to find out what has changed.

备注:通过以上的内容,可以看到,是cfg配置错误.

4.查看新建的cfg配置

[root@testvm02 hosts]# cat 192.168.53.28.cfg
define host { use linux-server
host_name $i #发现这些的变量值都没有获取到.
address $i
} define service { use generic-service,graphed-service ; Name of service template to use
host_name $i
service_description System_Load
check_command check_nrpe!check_load
} define service {
use generic-service,graphed-service
host_name $i
service_description disk_usage
check_command check_nrpe!check_disk
}

5.所以修改脚本为以下

#!/bin/bash

for i in `cat hostsip.dat`
do
cd /usr/local/nagios/etc/objects/hosts
echo "current ipaddress $i"
cp 192.168.53.26.cfg $i.cfg
sed -i 's/192.168.53.26/'$i'/g' $i.cfg #增加单引号,表示通过$i获取变量的值,然后进行替换.
done
echo 'De@2018er' | sudo -S service nagios restart

6.重新执行脚本

[root@testvm02 tmp]# sh config.sh
current ipaddress 192.168.53.28
Running configuration check... Stopping nagios: .done.
Starting nagios: Running configuration check... done.

7.查看新生成的文件

[root@testvm02 hosts]# cat 192.168.53.28.cfg
define host { use linux-server
host_name 192.168.53.28
address 192.168.53.28
} define service { use generic-service,graphed-service ; Name of service template to use
host_name 192.168.53.28
service_description System_Load
check_command check_nrpe!check_load
} define service {
use generic-service,graphed-service
host_name 192.168.53.28
service_description disk_usage
check_command check_nrpe!check_disk
}

备注:变量已经替换成功,获取到了变量的值,然后用这个变量的值进行了替换.

文档创建时间:2018年8月2日19:05:10

sed在替换的时候,使用变量中的值?如何在sed实现变量的替换?获取到变量中的值?的更多相关文章

  1. Vue中父组件使用子组件的emit事件,获取emit事件传出的值并添加父组件额外的参数进行操作

    需求是这样的,需要输入这样一个列表的数据,可以手动添加行,每一行中客户编号跟客户姓名是自动关联的,就是说选取了客户姓名之后,客户编号是自动填充的,客户姓名是一个独立的组件,每一个下拉项都是一个大的对象 ...

  2. java 获取系统变量(环境变量和设置变量)

    前言 环境变量这个概念不陌生, 就是操作系统的环境变量. 系统变量就是java本身维护的变量. 通过 System.getProperty 的方式获取. 对于不同的操作系统来说, 环境变量的处理可能会 ...

  3. thinkphp5.0学习笔记(三)获取信息,变量,绑定参数

    1.构造函数: 控制器类必须继承了\think\Controller类,才能使用: 方法_initialize 代码: <?php namespace app\lian\controller; ...

  4. class_copyIvarList方法获取实例变量问题引发的思考

    在runtime.h中,你可以通过其中的一个方法来获取实例变量,那就是class_copyIvarList方法,具体的实现如下: - (NSArray *)ivarArray:(Class)cls { ...

  5. 项目中通过Sorlj获取索引库中的数据

    在开发项目中通过使用Solr所提供的Solrj(java客户端)获取索引库中的数据,这才是真正对项目起实质性作用的功能,提升平台的检索性能及检索结果的精确性 第一步,引入相关依赖的jar包 第二步,根 ...

  6. docker-compose 布署应用nginx中的create-react-app应用获取环境变量

    文章来源:https://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-re ...

  7. python raw String 获取字符串变量中的反斜杠

    常用的获取raw string的方式为: >>>r'\n' \n 不能用在字符串变量中,获取字符串变量中的反斜杠如下: tab = '\n' >>>tab.enco ...

  8. C#中如何获取系统环境变量等

    C#中获取系统环境变量需要用到Environment 类. 其中提供了有关当前环境和平台的信息以及操作它们的方法.该类不能被继承 以下代码得到%systemdrive%的值,即“C:” string ...

  9. PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法

    1 PowerDesigner中在生成的数据库脚本中用name列替换comment列作为字段描述的方法如下, 依次打开Tools -- Execute Commands -- Run Script,运 ...

随机推荐

  1. ActiveMQ队列特性:删除不活动的队列(Delete Inactive Destinations)

    方法一 通过 ActiveMQ Web 控制台删除. 方法二 通过 Java 代码删除. ActiveMQConnection.destroyDestination(ActiveMQDestinati ...

  2. C语言 · 排列数 · 排列式

    蓝桥练习场上不断碰到类似的题,都是一个递归搜索的套路. 算法提高 排列数   时间限制:1.0s   内存限制:256.0MB      问题描述 0.1.2三个数字的全排列有六种,按照字母序排列如下 ...

  3. Java Servlet (1) —— Filter过滤请求与响应

    Java Servlet (1) -- Filter过滤请求与响应 版本: Java EE 6 参考来源: Oracle:The Java EE 6 Tutorial: Filtering Reque ...

  4. [sed] linux sed 批量替换字符串

    比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl ...

  5. 【Python】 linecache模块读取文件

    [linecache] 过往在读取文件的时候,我们通常使用的是这种模式: with open('file.txt','r') as f: line = f.readline() while line: ...

  6. socket阻塞与非阻塞,同步与异步、I/O模型

    socket阻塞与非阻塞,同步与异步 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步:      所 ...

  7. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单-&g ...

  8. How Vmware snapshots works

    VMware中的快照是对VMDK在某个时间点的“拷贝”,这个“拷贝”并不是对VMDK文件的复制,而是保持磁盘文件和系统内存在该时间点的状态,以便在出现故障后虚拟机能够恢复到该时间点.如果对某个虚拟机创 ...

  9. MY_Selenium登录126邮箱,定位不到账号输入框解决办法

    转自:https://www.cnblogs.com/wuhl-89/p/7778463.html 查看元素发现id为动态,所以不选择以id定位. 使用xpath路径定位,每次获取元素都失败,最后网上 ...

  10. 实践:C++平台迁移以及如何用C#做C++包装层

    在前面,我们看过OpenTK与MOgre,这二个项目都是C#项目,但是他的实现都是C++.他们简单来说就是一个包装层.常见的包装方式有二种,一种就是我们熟知的显式P/Invoke(DllImport) ...