本文已参与[新人创作礼]活动,一起开启掘金创作之路。
三剑客,出动了!
sed
流编辑器,一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,不断重复,直到文件末尾。(文件的内容并没有改变,除非你使用重定向存储输入)
Sed 主要用于自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
命令格式
sed [options] 'command' file(s)
sed 和grep 不同,只有当语法错误时,退出状态非0,其他情况,退出状态都是0.
例:文件的打印,增,删
#[打印文件内容]
sed -n '/halt/p' passwd.txt #打印匹配halt的行(不加n会在之后输出全部内容)
sed -n 'p' passwd.txt #打印第行的内容,取消默认输出
sed -n '2p' passwd.txt #打印第二行的内容
sed -n '1,5p' passwd.txt #打印1到5行
sed -n '$p' passwd.txt #打印最后一行的内容
#[文件内容的增删] i地址定位的上面插入;a下面插入;c替换指定的整行内容;d删除文件内容
sed '$a99999' passwd.txt #文件最后一行下面增加内容
sed 'a99999' passwd.txt #文件每行下面增加内容
sed '5a99999' passwd.txt #文件第5行下面增加内容
sed '$i99999' passwd.txt #文件最后一行上一行增加内容
sed 'i99999' passwd.txt #文件每行上一行增加内容
sed '6i99999' passwd.txt #文件第6行上一行增加内容
sed '/^adm/ihello' #以adm开头行的上一行插入内容
sed '5chello world' passwd.txt #替换文件第5行内容
sed 'chello world'passwd.txt #替换文件所有内容
sed '1,5chello world' passwd.txt #替换文件1到5号内容为hello world
sed '/^daemon/c888888' passwd.txt #替换以user01开头的行
sed 'd' passwd.txt #删除每行
sed '1d' passwd.txt #删除文件第1行
sed '1,5d' passwd.txt #删除文件1到5行
sed '$d' passwd.txt #删除文件最后一行
搜索替换操作(文件的查改)
语法:sed 选项 ‘s/搜索的内容/替换的内容/动作’ 需要处理的文件
其中s表示search搜索;斜杠==/表示分隔符,可以自己定义;动作一般是打印p和全局替换g==(默认只替换每行第一个匹配到的内容)
常用参数
** -e 多项编辑; -r 扩展正则; -i 修改原文件; r 从文件中读取输入行; w 将所选的行写入文件; n 取消默认输出;**
#过滤出文件中的IP地址
sed -nr '/([0-9]{1,3}.){3}[0-9]{1,3}/p' passwd.txt
#过滤出ifcfg-eth0文件中的IP、子网掩码、广播地址
sed -nr '/([0-9]{1,3}.){3}[0-9]{1,3}/p' ifcfg-eth0|cut -d'=' -f2
#过滤vsftpd.conf文件中以#开头和空行
sed -e '/^#/d' -e '/^$/d' /etc/vsftpd/vsftpd.conf
#在passwd.txt文件中的第5行的前面插入“hello”;在passwd.txt文件的第8行下面插入“Cat”
sed -e '5ihello' -e '8aCat' passwd.txt -e '5=;8='
案例:glance安装脚本
#!/bin/bash
#[mariadb]
mysql -uroot -p000000 -e "create database glance;"
mysql -uroot -p000000 -e "grant all privileges on glance.* to 'glance'@'localhost' identified by '000000';"
mysql -uroot -p000000 -e "grant all privileges on glance.* to 'glance'@'%' identified by '000000';"
#[创建用户]
. /root/admin-openrc
openstack user create --domain default --password 000000 glance
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image" image
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292
#[安装glance]
yum -y install openstack-glance
sed -i '/database/a\connection = mysql+pymysql://glance:000000@controller/glance' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\auth_uri = http://controller:5000' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\auth_url = http://controller:35357' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\memcached_servers = controller:11211' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\auth_type = password' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\project_domain_name = default' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\user_domain_name = default' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\project_name = service' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\username = glance' /etc/glance/glance-api.conf
sed -i '/keystone_authtoken/a\password = 000000' /etc/glance/glance-api.conf
sed -i '/paste_deploy/a\flavor = keystone' /etc/glance/glance-api.conf
sed -i '/glance_store/a\stores = file,http' /etc/glance/glance-api.conf
sed -i '/glance_store/a\default_store = file' /etc/glance/glance-api.conf
sed -i '/glance_store/a\filesystem_store_datadir = /var/lib/glance/images/' /etc/glance/glance-api.conf
sed -i '/database/a\connection = mysql+pymysql://glance:000000@controller/glance' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\auth_uri = http://controller:5000' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\auth_url = http://controller:35357' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\memcached_servers = controller:11211' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\auth_type = password' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\project_domain_name = default' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\user_domain_name = default' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\project_name = service' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\username = glance' /etc/glance/glance-registry.conf
sed -i '/keystone_authtoken/a\password = 000000' /etc/glance/glance-registry.conf
sed -i '/paste_deploy/a\flavor = keystone' /etc/glance/glance-registry.conf
su -s /bin/sh -c "glance-manage db_sync" glance
systemctl start openstack-glance-api.service openstack-glance-registry.service
systemctl enable openstack-glance-api.service openstack-glance-registry.service
. /root/admin-openrc
glance image-create --name cirros --disk-format qcow2 --container-format bare --progress < /opt/mitaka/image/cirros-0.3.4-x86_64-disk.img
openstack image list
sed 基础到此为止,有不足的地方希望大家海涵!
感谢大家,点赞,收藏,关注,评论!