一键部署LNMP:

一键部署DHCP、DNS、LAMP、Mysql、samba、nfs、NTP

sed 处理文本内容

学习方法:
主要学习选项和条件
思路:sed是要替换vim的

语法结构:
1.前置命令 | sed 选项 ‘条件指令’
2.sed 选项 ‘条件指令’ 文件

//1.条件可以是行号或者/正则/
//2.没有条件是默认所有条件
//3.指令可以是增删改查指令
//4.默认sed会输出所有的内容,可以使用-n 屏蔽输出
//5.支持扩展正则,使用-r选型

常用的选项:
-n :屏蔽输出
-r :让sed支持扩展正则
-i :直接修改源文件,默认值通过内存进行修改,源文件无影响

//多个指令用分号;进行间隔


指令:
p : 输出
准备测试文件cp  /etc/passwd  ./passwd

1.打印第三行:
	# sed -n  ‘3p’ passwd
2.打印第3-5行:
	# sed -n  ‘3,5p’ passwd
3.打印第3行和第5行:
	# sed -n  ‘3p;5p’passwd
4.打印第3行以及后面的10行:
	# sed -n  ‘3,+10p’passwd
5.打印奇数行:
	# sed -n  ‘1~2p’passwd
6.打印偶数行:
	# sed -n  ‘2~2p’passwd
7.打印包含root的行:
	# sed -n  ‘/root/p’passwd
8.打印一bash结尾的行:
	# sed -n  ‘/bash$/p’passwd

‘$=’:输出文件的行数

指令:
p :输出
d :删除:
1.删除文件最后一行:
# sed ‘/KaTeX parse error: Expected 'EOF', got '#' at position 27: …t 2.删除文件空行: #̲ sed ‘/^/d’tset.txt
s :替换:

# cat  test.txt
2017  2018  2019
2017  2017  2019
2017  2017  2017


语法结构:
1. sed  ‘s/old/new/’ tset.txt
	//替换第一个匹配到的old
2. sed  ‘s/old/new/g’test.txt
	//替换所有匹配到的old
3. sed  ‘s/old/new/2’test.txt
	//替换每行匹配到的第2个

替换实现删除的效果:
1. sed  ‘s/old//2’test.txt
	//删除匹配到每行的第2个
2. sed  -n ‘s/old/new/p’test.txt
	//打印出替换之后的结果

实例演示:  s指令
1.将test.txt 中每行第三个xml替换为XML
sed  ‘s/xml/XML/3’ test.txt

2.将test.txt 中每行的xml删除
sed  ‘s/xml//’ test.txt

3.将每行的/bin/bash替换为/bin/sh
sed  's/\/bin\/bash/\/sbin\/sh/g' 
sed  's#/bin/bash#/bin/bash#' 

4.将第4-7行加上注释  (每行开头加上#号)
# sed  ‘4,7s/^/#/’ test.txt

5.将以#an 开头的注释去掉  (去掉每行开头的#号)
# sed  ‘s/^#an/an/’ test.txt

6.删除文件中每行的第二个字符,最后一个字符(两次操作,需要用分号隔开)
# sed  ‘s/.//2 ; s/.$//’ test.txt

7.将文件中每行的第一个和最后一个字符进行互换
# sed  -r  ‘s/^(.)(.*)(.)$/\3\2\1/’ test.txt
	// -r 选项支持扩展正则

8.删除文件中所有数字
# sed  ‘s/[0-9]//’ test.txt

9.删除行首的空格
# sed  -r ‘s/^( )+//’ test.txt

10.为文件中每个的大写字母添加括号
# sed  -r ‘s/[A-Z]/[\1]/g’

实例:编写一个ftp.sh脚本,用来安装配置匿名FTP服务
    脚本实现功能:
	1.通过yum安装vsftpd软件包
	2.修改vsfatpd服务配置,开启匿名上传
	3.调整/var/ftp/pub/目录权限,允许ftp写入
	4.启动vsftpd服务,设置为开机自启

FTP服务安装及配置:
	包名:vsftpd
	配置文件: /etc/vsftpd/vsftpd.conf
	端口: 20  21
	黑名单文件: /etc/vsftpd/ftppusers
	白名单文件: /etc/vsftpd/user_list
	匿名传输:
		#anonymous_enable=YES
	允许本地用户登录:
		#incal_enable=YES


#!/bin/bash
yum -y install  vsftpd    
	//安装vsftpd软件
sed  -i  ‘s/^#an/s/^#//’  /etc/vsftpd/vsftpd.conf
	//修改配置文件
chown  ftp  /var/ftp/pub
	//调整目录权限
systemctl  restart  vsftpd
systemctl  enbale  vsftpd

sed 多文本处理:
完成以下操作:
修改主机配置文件
修改hosts文件,添加两条映射记录
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com

多文本处理操作:
i :在指定的行之前插入文本
a :在指定的行之后插入文本
c :替换指定的行

语法结构:
# sed  ‘2a  XX’ a.txt   //在第二行后面,追加XX
# sed  ‘2i  XX’ a.txt   //在第二行前面,追加XX
# sed  ‘2c  XX’ a.txt   //将第二行替换为XX

修改主机名配置文件:添加两条映射记录
192.168.1.2 www.aaa.com
192.168.1.3 www.bbb.com

sed ‘$a 192.168.1.2 www.aaa.com’ /etc/hosts

总结:

sed 选项 ‘条件指令’ 文件

选项:
-n :屏蔽默认输出
-r :支持扩展正则
-i :修改源文件
条件:
行号: 4 4,5 4~2 4,+10
/正则/
指令:
p :打印
d :删除
s :替换 s/旧/新/g
a :追加
i :插入
c :替换行

脚本实例:
编写一个getupwd.sh 实现以下需求:
1.找到使用bash作为登录shell的本地用户
2.列出这些用户的shadow密码记录
3.按照每行“ 用户名 —> 密码记录 ” 格式保存到getuowd.log
root - -> 1 1 1mQXHhaWYS$yONHc2AQw66XKrzJN2M.sYr/

实现思路:
  1.先从/etc/passwd中取出以bash结尾的用户名
  2.结合循环去遍历取出来的用户名,对/etc/shadow进行处理
  3.采用掐头去尾方式,获得密码字符串
  4.按照指定格式进行追加

#!/bin/bash
username=`sed  ‘/bash$/s’ /etc/passwd`
for i in  $username
do
   passl=`grep  $i  /etc/shadow`
   pass2=${pass1#*:}
   pass3=${pass2%%:*}
   echo “$i - -> $pass3” >> getupws.log
done

你可能感兴趣的:(一键部署LNMP:)